【问题标题】:Jinja2 templates a superset of Django templates?Jinja2 模板是 Django 模板的超集?
【发布时间】:2014-08-05 20:48:05
【问题描述】:

根据the project documentation,Jinja2 模板是“在 Django 模板之后建模的 [sic]。”我在别处读到 Django 模板可以与 Jinja2 互换使用。

所以,我想标题已经说明了一切:Jinja2 模板是 Django 原生模板的(严格)超集吗?

否则,它们有何不同?如果差异很小,为什么 Jinja2 不是 Django 原生模板的超集?

【问题讨论】:

    标签: django django-templates jinja2


    【解决方案1】:

    不,Jinja 不是 Django 模板语言的严格超集。 Jinja documentation 中给出了一个很好的差异总结。

    Jinja 成为 DTL 的超集并没有什么特别的原因。它是一个独立的包,可以被任何 Python Web 框架使用。我想说大部分差异是由于 Jinja 试图比 DTL 限制更少,更 Pythonic。例如,虽然 Jinja 过滤器语法使用通常的函数调用括号,但 DTL 使用 |: 的组合。 (随着时间的推移,DTL 慢慢地发生了变化,并且比以前更加 Pythonic 了。)

    Jinja 得到了 Django 的官方支持,甚至在此之前就有第三方包允许你使用它。唯一真正的兼容性问题是您不能在 Jinja 模板中使用 Django 的 custom template tags。如果您使用 Jinja 作为模板语言,但想使用第三方包,该包提供了自定义模板标签的功能,则可能会出现这种情况。

    【讨论】:

      【解决方案2】:

      Django 到 Jinja2 模板在方法调用、条件、过滤参数和测试方面略有不同

      大多数语法元素的外观和工作方式都相同。

      Django 模板中的示例:

      {% for page in user.get_created_pages %}<br/>
          <br/>
      {% endfor %}
      

      在 Jinja 会是这样:

      {% for page in user.get_created_pages() %}<br/>
          <br/>
      {% endfor %}
      

      【讨论】:

        猜你喜欢
        • 2022-01-12
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多