我在模板中遇到问题。我在文档中找不到包含去查找包含的.html(我假设它与模板相同?),我将{% include "xy.html" %}
放在一个文件中,但它看起来像xy.html
未找到。我也找不到任何错误。 xy.html与其调用文件位于同一目录中,该文件位于Django用语中的模板文件夹中。
我没有显示错误信息,我只是没有显示包含的文件。
我应该在哪里放置xy.html
文件?
答案 0 :(得分:1)
模板名称可以是变量或硬编码(引用) 字符串,单引号或双引号。
将模板名称放入引号:
{% include "xy.html" %}
仅供参考,xy.html
应位于TEMPLATE_DIRS
个目录中的任何位置。
FYI2,将TEMPLATE_DEBUG
设置为True
有助于在呈现模板时出现异常时查看详细的错误消息。
答案 1 :(得分:1)
让我们使用一个名为foo的示例项目:
foo
-blog
-admin.py
-models.py
-views.py
-tests.py
-templates
-blog
-post.html
-news
-admin.py
-models.py
-views.py
-tests.py
-templates
-newsitem.html
-foo
-settings.py
-urls.py
-wsgi.py
-templates
-base.html
-blog
-post.html
如果您的settings.py包含:
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates')
)
然后Django使用TEMPLATE_DIRS模板覆盖app模板,这意味着如果post.html同时驻留在blog / templates / blog / post.html和templates / blog / post.html中(如上例所示) 然后Django会加载后来的。 如果你没有指定TEMPLATE_DIRS,那么Django会在每个应用程序的templates文件夹中搜索post.html,这意味着如果你指定了:blog / templates / blog / post.html和news / templates / blog / post .html都有效, 在这种情况下,Django将加载模板,具体取决于你INSTALLED_APPS的样子:
INSTALLED_APPS = (
...
'blog',
'news',
...
)
然后Django将呈现博客应用的模板而不是新闻应用的模板(如果我们在新闻模板下有博客/ post.html)。 然而,如果你的INSTALLED_APPS看起来像:
INSTALLED_APPS = (
...
'news',
'blog',
...
)
然后Django将从新闻应用程序加载post.html而不是博客应用程序(再次,如果我们在我们的新闻应用程序下有模板/ blog / post.html)。 您也应该对模板名称挑剔,具有相似名称的模板将根据您的设置和INSTALLED_APPS顺序(更高的覆盖更低)相互覆盖,TEMPLATE_DIRS模板始终覆盖所有其他模板。