【问题标题】:Jinja2 template inheritance based on languageJinja2基于语言的模板继承
【发布时间】:2014-04-07 18:25:13
【问题描述】:

我正在开发一个 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 方式来做到这一点。

【问题讨论】:

标签: python google-app-engine templates jinja2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-01-19
    • 2015-04-14
    • 1970-01-01
    • 2017-05-15
    • 2010-12-30
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多