我遵循了这个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',
],
},
},
]
答案 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'