模板文件保存在app目录下,但在渲染时会引发TemplateDoesNotExist异常:
模板加载器postmortem如下:
Django尝试按以下顺序加载这些模板:
Using loader django.template.loaders.app_directories.Loader:
...
$PROJECT/apps/myapp/templates/search.html (File does not exist)
...
我想知道它为什么寻找:
$PROJECT/apps/myapp/templates/search.html
而不是:
$PROJECT/apps/myapp/templates/myapp/search.html
后者确实存在
答案 0 :(得分:6)
$PROJECT/apps/myapp/templates/search.html
。这就是doc says所寻找的路径。
django.template.loaders.app_directories.Loader
将按顺序查找所有templates
内的INSTALLED_APPS
目录。
答案 1 :(得分:3)
django.template.loaders.filesystem.load_template_source :根据TEMPLATE_DIRS,此加载程序从文件系统加载模板。 默认情况下已启用。
django.template.loaders.app_directories.load_template_source :此加载程序从文件系统上的Django应用程序加载模板。对于INSTALLED_APPS中的每个应用程序,加载程序都会查找templates子目录。如果目录存在,Django会在那里查找模板。
这意味着您可以使用各个应用程序存储模板,从而可以轻松地使用默认模板分发Django应用程序。例如,如果INSTALLED_APPS包含('myproject.polls','myproject.music'),则get_template('foo.html')将按此顺序查找模板:
/path/to/myproject/polls/templates/foo.html /path/to/myproject/music/templates/foo.html
请注意,加载程序在首次导入时会执行优化:它会缓存INSTALLED_APPS包中有一个模板子目录的列表。
默认情况下启用此加载程序。
答案 2 :(得分:0)
假设您有一个默认项目和创建的应用程序为
只需进行最少的更改即可使第一个模板正常工作
我的错误摘要
答案 3 :(得分:-3)
将它们添加到您的设置文件中。
import os
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT, "/apps/myapp/templates/"),
)