django.template.loaders.app_directories.Loader找不到模板文件
模板文件保存在app目录下,但在呈现时会引发TemplateDoesNotExist异常: 模板加载程序的后期处理如下所示: Django尝试按以下顺序加载这些模板:django.template.loaders.app_directories.Loader找不到模板文件,django,django-templates,Django,Django Templates,模板文件保存在app目录下,但在呈现时会引发TemplateDoesNotExist异常: 模板加载程序的后期处理如下所示: Django尝试按以下顺序加载这些模板: Using loader django.template.loaders.app_directories.Loader: ... $PROJECT/apps/myapp/templates/search.html (File does not exist) ... 我想知道为什么它会寻找: $PROJEC
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
后者确实存在将它们添加到您的设置文件中
import os
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT, "/apps/myapp/templates/"),
)
$PROJECT/apps/myapp/templates/search.html
。这就是它将要寻找的路径
django.template.loaders.app\u目录。Loader
将依次在所有已安装的\u应用程序中查找templates
目录。django.template.loaders.filesystem.Loader\u template\u source:此加载器根据模板目录从文件系统加载模板默认情况下,它处于启用状态。
django.template.loaders.app_目录。load_template_源:此加载器从文件系统上的django应用程序加载模板。对于已安装的应用程序中的每个应用程序,加载程序将查找templates子目录。如果目录存在,Django将在那里查找模板
这意味着您可以将模板存储在各个应用程序中,从而可以轻松地使用默认模板分发Django应用程序。例如,如果已安装的_应用程序包含('myproject.polls'、'myproject.music'),则get_模板('foo.html')将按以下顺序查找模板:
Using loader django.template.loaders.app_directories.Loader:
...
$PROJECT/apps/myapp/templates/search.html (File does not exist)
...
请注意,加载程序在首次导入时执行优化:它缓存已安装的应用程序包具有templates子目录的列表
默认情况下,此加载程序处于启用状态。假设您创建了一个默认项目和应用程序
django管理员启动项目xyz
django管理员startapp abc
xyz和abc文件夹都位于主项目文件夹中
要使第一个模板正常工作,需要进行以下最小的更改
在settings.py中,将已安装的应用程序更改为添加“abc”(我忘记了,失败了)
在URL.py中添加
- 添加行:导入abc.views
- 更改URL模式以添加路径('abc/',abc.views.index)
在views.py的索引定义中,使用loader.get_模板('abc/index.html')
创建abc/templates/abc/index.html文件(我写了“模板”,花了几个小时才意识到这就是“模板”)
确保模板和内部文件夹具有“其他”用户的执行权限和html文件的读取权限。(我以root用户身份工作,但由于此错误而失败)
重新启动项目(runserver或apache2服务)
我的错误摘要
编辑已安装的应用程序
默认为“模板”
设置x和r权限
您好,您也可以添加您用于请求模板的代码吗?你有类似于t=loader.get_template('myapp/search.html')
的东西吗?当你使用django模板加载器时,你不需要指定template\u DIRS
。我忘了它应该是类似于get_template(“myapp/search.html”)的东西,而不是get_template(“search.html”)。我只记得最好创建路径为“myapp/templates/myapp/search.html”的模板文件,但这并不意味着在查找模板时不需要路径中的“myapp”。这是我的错。谢谢各位。我也遇到了同样的问题,所以我们应该始终使用[appname]/[template].html结构吗?