我正在为我的 Django 网站尝试 Jinja2。
现在,由于 Jinja2 不是官方的 Django 模板引擎,它拒绝识别/加载我在 Jjinja2 之前使用的模板标签。
现在,即使模板标签的创建必须发生变化,那么如何才能在 3rd 方应用程序中反映出来呢?
在这种情况下,似乎不可能使用 Jinja2,因为系统必须按照 Jinja2 工作。
(我也coffin
用作 Jinja-Django 的适配器)。
我正在为我的 Django 网站尝试 Jinja2。
现在,由于 Jinja2 不是官方的 Django 模板引擎,它拒绝识别/加载我在 Jjinja2 之前使用的模板标签。
现在,即使模板标签的创建必须发生变化,那么如何才能在 3rd 方应用程序中反映出来呢?
在这种情况下,似乎不可能使用 Jinja2,因为系统必须按照 Jinja2 工作。
(我也coffin
用作 Jinja-Django 的适配器)。
你可以用棺材做到这一点。Coffin 提供了一种方法来注册 django 风格的标签以在 jinja2 模板中使用:
from coffin import template
from ThrdPartyDjangoLib import djangoTagIWantToUse
register = template.Library()
register.tag('djangoTagIWantToUse', djangoTagIWantToUse)
根据棺材文档,您必须将任何自定义 django 模板标签重写为自定义 Jinja2 扩展。
您还可以使用 jinja2 宏功能来模拟 Django 的模板标签。最显着的区别是,对于 Jinja2 宏,必须通过模板上下文提供所有上下文数据,而在 Django 标签中,您可以使用其他方式访问数据(例如从数据库加载或调用其他 Python 库)。
我使用 Jinja2 模板已经有一段时间了,从来不需要创建自定义模板标签。
可以在站点的一个应用程序中使用 django 模板,而在另一个应用程序中使用 jinja2,这不是问题,但不容易从 django 模板导入或扩展 jinja2 模板,反之亦然。
Django 的结构不允许交换模板引擎,因为它是系统的核心部分。即使您可以使用coffin
,它也不是受支持的配置,也不能指望第三方模块支持它。这与要求第三方模块支持是一样的,sqlalchemy
因为您找到了一种让 django 使用它的方法。
如果您想使用 jinja2,请使用设计有可插入模板引擎的框架 - 或不带模板引擎的框架。
集成页面列出了 Jinja2 附带的开箱即用的集成。在该页面上,您可以看到它Pyramid
是受支持的——这是因为金字塔的设计允许可插拔组件。
Flask
(由后面的同一个人制作Jinja2
)对 Jinja2 有原生支持。