jinja2-模版简介

一 简介

在Flask中,调用render_template来对模版进行渲染,使用render_template,只需要导入这个API就可以,from flask import render_template

 

模板仅仅是文本文件。它可以生成任何基于文本的格式(HTML、XML、CSV、LaTex 等等)。 它并没有特定的扩展名, .html 或 .xml 都是可以的。

模板包含 变量 或 表达式 ,这两者在模板求值的时候会被替换为值。模板中 还有标签,控制模板的逻辑

 

二 变量

应用把变量传递到模板,你可能在模板中弄混。变量上面也可以有你能访问的属性或元 素。变量看起来是什么,完全取决于应用提供了什么。

你可以使用点( . )来访问变量的属性,作为替代,也可以使用所谓的“下标”语 法( [])。下面的几行效果是一样的:


{{ foo.bar }} {{ foo['bar'] }}

三 条件语句if

{% if users %}
<ul>
{% for user in users %} <li>{{ user.username|e }}</li> {% endfor %} </ul> {% endif %}

{% if kenny.sick %}
    Kenny is sick.
{% elif kenny.dead %} You killed Kenny! You bastard!!! {% else %} Kenny looks okay --- so far {% endif %}

四 迭代遍历for 

<h1>Members</h1>
<ul>
{% for user in users %} <li>{{ user.username|e }}</li> {% endfor %} </ul>

模板中的变量保留它们的对象属性,可以迭代像 dict 的容器
<dl>
{% for key, value in my_dict.iteritems() %} <dt>{{ key|e }}</dt> <dd>{{ value|e }}</dd> {% endfor %} </dl>

在一个 for 循环块中你可以访问这些特殊的变量:

变量描述
loop.index当前循环迭代的次数(从 1 开始)
loop.index0当前循环迭代的次数(从 0 开始)
loop.revindex到循环结束需要迭代的次数(从 1 开始)
loop.revindex0到循环结束需要迭代的次数(从 0 开始)
loop.first如果是第一次迭代,为 True 。
loop.last如果是最后一次迭代,为 True 。
loop.length序列中的项目数。
loop.cycle在一串序列间期取值的辅助函数。见下面的解释。



模板中的循环内不能 break 或 continue,(除非启用Import name: jinja2.ext.loopcontrols,这个扩展添加了循环中的 break 和 continue 支持) 。但你可以在迭代 中过滤序列来跳过项目。下面的例子中跳过了所有隐藏的用户:
{% for user in users if not user.hidden %} <li>{{ user.username|e }}</li> {% endfor %}

递归
只需要在循环定义中加上 recursive 修饰,并在你想使用递归的地 方,对可迭代量调用 loop 变量
<ul class="sitemap">
{%- for item in sitemap recursive %} <li><a href="{{ item.href|e }}">{{ item.title }}</a> {%- if item.children -%} <ul class="submenu">{{ loop(item.children) }}</ul> {%- endif %}</li> {%- endfor %} </ul>

五 测试if  is

测试可以用于对照普通表达式测试一个变量。 要测试一个变量或表达式,你要在变量后加上一个 is 以及测试的名称。例如,要得出 一个值是否定义过,你可以用 name is defined ,
这会根据 name 是否定义返回 true 或 false 

测试也可以接受参数。如果测试只接受一个参数,你可以省去括号来分组它们。例如, 下面的两个表达式做同样的事情:
{% if loop.index is divisibleby 3 %} {% if loop.index is divisibleby(3) %}
常见的测试函数有: callable(object)是否是一个函数, defined(value) 值是否定义,iterable(value)是否可迭代,lower(value)是否小写,none(value)是否为none,number(value)是否是数字

string(value)是否是字符串
{% if variable is defined %}  value of variable: {{ variable }} {% else %}  variable is not defined {% endif %}
 

六 注释

要把模板中一行的部分注释掉,默认使用 {# ... #} 注释语法

 

七 空白控制

剥离模板中的空白。当你在块(比如一个 for 标签、一段注释或变 量表达式)的开始或结束放置一个减号( - ),可以移除块前或块后的空白

{% for item in seq -%} {{ item }} {%- endfor %}


这会产出中间不带空白的所有元素。如果 seq 是 1 到 9 的数字的列表, 输出会是 123456789 
标签和减号之间不能有空白

八 转义

最简单的方法是在变量分隔符中( {{ )使用变量表达式输出:

{{ '{{' }}

对于较大的段落,标记一个块为 raw 是有意义的。例如展示 Jinja 语法的实例, 你可以在模板中用这个片段:

{% raw %}
    <ul>
    {% for item in seq %}
        <li>{{ item }}</li>
    {% endfor %}
    </ul>
{% endraw %}

九 赋值

在代码块中,你也可以为变量赋值。在顶层的(块、宏、循环之外)赋值是可导出的,即 可以从别的模板中导入。

赋值使用 set 标签,并且可以为多个变量赋值:

{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %} {% set key, value = call_something() %}
 

转载于:https://www.cnblogs.com/sysnap/p/6554854.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值