Django 从特定目录加载继承模板

3 投票
1 回答
2482 浏览
提问于 2025-04-15 19:18

在我们的项目中,有很多不同的模板供客户选择(用于他们的网店)。文件的结构大致是这样的:

templates
    cart.html
    closed.html
    head.html
    standard
        bishop
        default
        indiana
        marley
        mocca
        nihilists
        raconteurs
        tripwire

每个标准文件夹的子文件夹里都有一些模板文件,比如 base.html、browse.html 和 item.html。browse 和 item 是从 base 继承过来的。

我想做的是在一个特定的模板文件夹中渲染 browse 模板(比如 templates/standard/bishop),而不受我应用中其他全局模板路径设置的影响。有没有办法做到这一点?

更新:我会尽量说得更清楚。如果我只是从 bishop 子文件夹渲染 browse.html,它会尝试去扩展 base.html,但找不到这个文件。我可以修改设置的模板路径,把 bishop 文件夹加进去,但我希望能找到一种方法,让它在不改变这个设置的情况下也能正常工作。

1 个回答

6

在你的模板文件 templates/standard/bishop/browse.html 中,你做了以下操作:

{% extends "base.html" %}

这里提到的是 templates/base.html,而不是 templates/standard/bishop/base.html。默认情况下,Django 会检查你安装的应用程序以及在 settings.py 文件中指定的 TEMPLATE_DIRS 目录下的模板。

这种行为是由 settings.py 中的 TEMPLATE_LOADERS 设置决定的:

你可以尝试创建自己的模板加载器来解决这个问题,或者直接指定 base.html 的实际路径:

{% extends "standard/bishop/base.html" %}

撰写回答