笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

从其它的模板引擎切换

发布者: 笨鸟自学网



过滤器参数

Jinja2 为过滤器提供不止一个参数。参数传递的语法也是不同的。一个这样的 Django 模板:

{{ items|join:", " }}

在 Jinja2 中是这样:

{{ items|join(', ') }}

实际上这有点冗赘,但它允许不同类型的参数——包括变量——且不仅是一种。

测试

除过滤器外,同样有用 is 操作符运行的测试。这里是一些例子:

{% if user.user_id is odd %}
    {{ user.username|e }} is odd
{% else %}
    hmm. {{ user.username|e }} looks pretty normal
{% endif %}

循环

因为循环与 Django 中的十分相似,仅有的不兼容是 Jinja2 中循环上下文的特殊变 量名为 loop 而不是 Django 中的 forloop 。

周期计

Jinja 中没有 {% cycle %} 标签,因为它是隐式的性质。而你可以用循环对象 的 cycle 方法实现几乎相同的东西。

下面的 Django 模板:

{% for user in users %}
    <li class="{% cycle 'odd' 'even' %}">{{ user }}</li>
{% endfor %}

Jinja 中看起来是这样:

{% for user in users %}
    <li class="{{ loop.cycle('odd', 'even') }}">{{ user }}</li>
{% endfor %}

没有与 {% cycle ... as variable %} 等价的。

Mako

如果你迄今使用 Mako 并且想要转换到 Jinja2 ,你可以把 Jinja2 配置成 Mako 一 样:

env = Environment('<%', '%>', '${', '}', '%')

环境配置成这样后, Jinja2 应该可以解释一个 Mako 模板的小型子集。 Jinja2 不支持 嵌入 Python 代码,所以你可能需要把它们移出模板。 def 的语法(在 Jinja2 中 def 被叫做宏)并且模板继承也是不同的。下面的 Mako 模板:

<%inherit file="layout.html" />
<%def name="title()">Page Title</%def>
<ul>
% for item in list:
    <li>${item}</li>
% endfor
</ul>

在以上配置的 Jinja2 中看起来是这样:

<% extends "layout.html" %>
<% block title %>Page Title<% endblock %>
<% block body %>
<ul>
% for item in list:
    <li>${item}</li>
% endfor
</ul>
<% endblock %>


12
上一篇:集成下一篇:提示和技巧

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-9-17 04:17 , Processed in 0.049850 second(s), 17 queries .

© 2001-2020

返回顶部