模板标签在哪里包含预期在Django框架中找到的文件

时间:2014-08-10 21:13:56

标签: python django templates django-templates

我在模板中遇到问题。我在文档中找不到包含去查找包含的.html(我假设它与模板相同?),我将{% include "xy.html" %}放在一个文件中,但它看起来像xy.html未找到。我也找不到任何错误。 xy.html与其调用文件位于同一目录中,该文件位于Django用语中的模板文件夹中。

我没有显示错误信息,我只是没有显示包含的文件。

我应该在哪里放置xy.html文件?

2 个答案:

答案 0 :(得分:1)

根据include documentation

  

模板名称可以是变量或硬编码(引用)   字符串,单引号或双引号。

将模板名称放入引号:

{% 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模板始终覆盖所有其他模板。