Django:如何使用Jinja 2的第三方app模板标签?

时间:2012-06-08 13:01:25

标签: python django templates django-templates jinja2

我正在为我的django网站尝试Jinja2

现在,由于Jinja2不是正式django templating engine,并且拒绝识别/加载我在jinja2之前使用的模板标记。

现在,即使模板标签的创建有变化,那么如何反映第三方应用呢?

在这种情况下,似乎不可能使用Jinja2,因为系统必须按照jinja2工作。

[我也使用coffin作为Jinja-Django的适配器]

感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

你可以用棺材做到这一点。 Coffin提供了一种注册django风格标签的方法,以便在jinja2模板中使用:

from coffin import template
from ThrdPartyDjangoLib import djangoTagIWantToUse
register = template.Library()

register.tag('djangoTagIWantToUse', djangoTagIWantToUse)

答案 1 :(得分:1)

根据coffin docs,您必须将任何自定义django模板标记重写为自定义Jinja2扩展。

您还可以使用jinja2宏功能来模拟Django的模板标签。最显着的区别是,对于Jinja2宏,有必要通过模板上下文提供所有上下文数据,而在Django标签中,您可以使用其他方式访问数据(例如从数据库加载或调用其他Python库)。 p>

我一直在使用Jinja2模板,从来没有必要创建自定义模板标签。

可以在网站上的一个应用程序中使用django模板,在另一个应用程序中使用jinja2,这不是问题,但是不容易从django模板导入或扩展jinja2模板,反之亦然。

答案 2 :(得分:0)

Django的结构不允许交换模板引擎,因为它是系统的核心部分。即使您可以使用coffin,它也不是受支持的配置,并且不期望第三方模块支持它。这与要求第三方模块支持sqlalchemy是一样的,因为你找到了让django使用它的方法。

如果你想使用jinja2,请使用一个设计有可插拔模板引擎的框架 - 或者没有模板引擎的框架。

integration page列出了Jinja2附带的开箱即用集成。在该页面上,您可以看到支持Pyramid - 这是因为按设计金字塔允许可插入组件。

Flask(由Jinja2后面的同一个人制作)原生支持Jinja2。