使用Django包时TemplateDoesNotExist

时间:2017-02-10 13:06:41

标签: python django templates

我遵循了这个Django教程:https://docs.djangoproject.com/en/1.10/intro/reusable-apps/。 我有一个名为oldcity的项目和一个名为oldantwerp的应用。该应用程序位于名为django-oldantwerp的父目录中,并且应用程序目录本身具有子目录templates。我的项目正在寻找的index.html文件就像这样:

django-oldantwerp>oldantwerp>templates>oldantwerp>index.html

我尝试将此应用与我的项目一起使用,方法是将其包含在settings.py中:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'oldantwerp'
]

并在urls.py(在项目中),如下:

urlpatterns = [
url(r'^oldantwerp/', include('oldantwerp.urls')),
url(r'^admin/', admin.site.urls),
]

当我进入管理页面时,一切正常,但当我尝试打开索引页面时,我收到此错误:

TemplateDoesNotExist at /oldantwerp/

它说它试图找到index.html文件,如下所示:

Template loader postmortem
Django tried loading these templates, in this order:

Using engine django:
* django.template.loaders.filesystem.Loader: /Users/Vincent/Apps/oldcity/templates/oldantwerp/index.html (Source does not exist)
* django.template.loaders.app_directories.Loader: /Users/Vincent/Apps/oldcity/venv/lib/python3.4/site-packages/django/contrib/admin/templates/oldantwerp/index.html (Source does not exist)
* django.template.loaders.app_directories.Loader: /Users/Vincent/Apps/oldcity/venv/lib/python3.4/site-packages/django/contrib/auth/templates/oldantwerp/index.html (Source does not exist)

它还尝试搜索另一个文件:place_list.html,这很奇怪,因为我不认为我有这样的文件。

可能有什么不对?

修改

这是oldantwerp文件夹中的views.py代码:

class IndexView(generic.ListView):
    template_name = 'oldantwerp/index.html'
    context_object_name = 'places'

    def get_queryset(self):
        return Place.objects.order_by('id')[:]

修改

也许值得一提:当我在oldantwerp项目文件夹中只有一个文件夹oldicty作为子目录时,一切都运行了。此错误仅在我开始从外部程序包实现后发生。

修改

这些是我在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',
        ],
    },
},
]

3 个答案:

答案 0 :(得分:0)

最可能的问题可能是您的视图中的模板名称错误。确保您在视图中使用模板oldantwerp/index.html,而不仅仅是index.html

答案 1 :(得分:0)

如果查看堆栈跟踪,您会看到应用程序尝试从以下位置加载模板:* django.template.loaders.filesystem.Loader: /Users/Vincent/Apps/oldcity/templates/oldantwerp/index.html (Source does not exist). 如果我正确读出你的第一个语句你的目录结构是:

django-oldantwerp>oldantwerp>templates>oldantwerp>index.html.

因此,您可以创建适合django的目录结构来标识模板目录,也可以从设置文件中更新模板常量,并将django指向可以找到模板的物理位置。

答案 2 :(得分:0)

您可以尝试在settings.py中设置DIRS,如下所示:os.path.join(BASE_DIR,' templates'),从模板文件夹中删除oldantwerp文件夹,并在模板中添加index.html。

之后,编辑template_name =' oldantwerp / index.html' to template_name =' index.html'