Jinja2模板继承基于语言

时间:2014-03-05 15:32:22

标签: python google-app-engine templates jinja2

我正在开发一个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方法。

1 个答案:

答案 0 :(得分:0)

使用Jinja函数加载器时,您可以控制模板的加载方式。

文档:http://jinja.pocoo.org/docs/api/#loaders

示例:我使用函数加载器从数据存储区加载每个模板,并为基本模板中的内容块创建子模板。函数加载器还可以读取项目中的模板(路径)。