我正在开发一个python GAE(带有jijna2)项目。我们的想法是根据我的请求国际化值使模板继承自己 例如,我有一个模板目录树:
templates
---- base.html
---- site_nav.html
---- CA
-------- site_nav.html
-------- fr
------------ site_nav.html
现在,当加拿大/法国用户请求模板时,我希望Jijna2在templates/CA/fr
目录中查找它,如果找不到templates/CA
,如果templates
中没有找到,那么TemplateDoesNotExist
。像templates/CA/fr/site_nav.html
这样的深层模板只有:
{% extends site_nav.html %} # to extend the templates/CA/site_nav.html
{% block logged_in %}
Canadian French content
{% endblock logged_in %}
由于templates/CA/site_nav.html
不存在,我们从templates/site_nav.html
延伸,其中包含:
{% block logged_in %}
American content
{% endblock logged_in %}
我希望使用{% include 'site_nav.html' %}
从任何地方添加它,如果我的国籍需要,可以加载适当的(更深)模板。
这只是我现在起床的一个解决方案。我知道这是不可能的,尤其是{% extends site_nav.html %}
,它永远不应该试图扩展自己,但最终是父本。
这只是一个例子,我希望有一种良好的Pythonic方法。
答案 0 :(得分:0)
使用Jinja函数加载器时,您可以控制模板的加载方式。
文档:http://jinja.pocoo.org/docs/api/#loaders
示例:我使用函数加载器从数据存储区加载每个模板,并为基本模板中的内容块创建子模板。函数加载器还可以读取项目中的模板(路径)。