Я пытаюсь создать домашнюю страницу для моего проекта Django. Я продолжаю получать эту ошибку:

TemplateDoesNotExist at /
home.html
Request Method: GET
Request URL:    http://xtradev.local/
Django Version: 1.9
Exception Type: TemplateDoesNotExist
Exception Value:    
home.html
Exception Location: /home/epic/EPIC/venv/lib/python2.7/site-packages/django/template/loader.py in get_template, line 43
Python Executable:  /usr/bin/python
Python Version: 2.7.9
Python Path:    
['/home/epic/EPIC/EPIC-PROJECT/EPIC-Django/EPIC_AR',
 '/home/epic/EPIC/venv/lib/python2.7/site-packages',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gst-0.10',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/pymodules/python2.7']
Server time:    Thu, 8 Dec 2016 14:04:41 +0000 

Мой settings.py выглядит так:

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},

]

Моя папка шаблонов находится в папке моего проекта и содержит home.html

Это код из loader.py (но я не думаю, что именно он делает / запрашивает):

def get_template(template_name, dirs=_dirs_undefined, using=None):
"""
Loads and returns a template for the given name.

Raises TemplateDoesNotExist if no such template exists.
"""
chain = []
engines = _engine_list(using)
for engine in engines:
    try:
        # This is required for deprecating the dirs argument. Simply
        # return engine.get_template(template_name) in Django 1.10.
        if isinstance(engine, DjangoTemplates):
            return engine.get_template(template_name, dirs)
        elif dirs is not _dirs_undefined:
            warnings.warn(
                "Skipping template backend %s because its get_template "
                "method doesn't support the dirs argument." % engine.name,
                stacklevel=2)
        else:
            return engine.get_template(template_name)
    except TemplateDoesNotExist as e:
        chain.append(e)

raise TemplateDoesNotExist(template_name, chain=chain)

Все кажется правильным, я не уверен, что я пропускаю. Есть идеи?

ОБНОВЛЕНИЕ: VIEWS.PY

from django.contrib.auth.models import User, Group
from django.shortcuts import render, HttpResponse
from rest_framework import filters
from rest_framework import viewsets

from serializers import UserSerializer, GroupSerializer

def home(request):
    return render(request, ('home.html'))

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

URLS.PY

admin.site.site_header = 'EPIC.AR Administration'

urlpatterns = [
    url(r'^$', 'EPIC_AR.views.home', name='Home'),
    url(r'^admin/', admin.site.urls),
    url(r'^api/1.0/', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),

]


Template-loader postmortem

Django tried loading these templates, in this order:

Using engine django:
django.template.loaders.filesystem.Loader: /home/epic/EPIC/EPIC-PROJECT/EPIC-Django/EPIC_AR/templates/home.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/epic/EPIC/venv/lib/python2.7/site-packages/suit/templates/home.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/epic/EPIC/venv/lib/python2.7/site-packages/django/contrib/admin/templates/home.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/epic/EPIC/venv/lib/python2.7/site-packages/django/contrib/auth/templates/home.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/epic/EPIC/venv/lib/python2.7/site-packages/rest_framework/templates/home.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/epic/EPIC/venv/lib/python2.7/site-packages/crispy_forms/templates/home.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/epic/EPIC/EPIC-PROJECT/EPIC-Django/EPIC_AR/home/templates/home.html (Source does not exist)

enter image description here

0
Nicoale 8 Дек 2016 в 17:07

3 ответа

Лучший ответ

Это была комбинация предложенных вещей - просто вопрос правильной последовательности вещей, я думаю.

Я добавил каталог, в котором находится home.html: (в views.py)

def home(request):
return render(request, 'epicar/home.html')

Затем я переместил папку с шаблонами BACK в основную директорию проекта:

enter image description here

sudo service apache2 restart

И вала!

enter image description here

Без ошибок :)

1
Nicoale 8 Дек 2016 в 15:40

Согласно вашему виду и файлу настроек, home.html должен находиться в папке templates.

Поэтому измените путь к home.html в представлении:

def home(request):
    return render(request, ('home.html'))

Кому

def home(request):
    return render(request, ('pathtoapp/home.html'))

Или переместить home.html в корень templates

1
Zagorodniy Olexiy 8 Дек 2016 в 15:12

Обычно, когда я получаю эту ошибку, я забываю добавить приложению настройку INSTALLED_APPS.

Загрузчик по умолчанию ищет в TEMPLATES['DIRS'], а затем в папке с шаблонами в корне каждого приложения, указанного в INSTALLED_APPS

2
Andee 8 Дек 2016 в 14:12