Django 从特定目录加载继承模板
在我们的项目中,有很多不同的模板供客户选择(用于他们的网店)。文件的结构大致是这样的:
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 设置决定的:
- http://docs.djangoproject.com/en/dev/ref/settings/#template-loaders
- http://docs.djangoproject.com/en/dev/ref/templates/api/#loader-types
你可以尝试创建自己的模板加载器来解决这个问题,或者直接指定 base.html 的实际路径:
{% extends "standard/bishop/base.html" %}