一 简介

在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() %}
 

最新文章

  1. mysql存储过程编写-入门案例-遁地龙卷风
  2. 简单的使用ehcache
  3. Object C中的数据类型表
  4. Bootstrap页面布局10 - BS表格
  5. js 解决原型问题的方案 : 构造器和原型的组合
  6. jquery控制css的display(控制元素的显示与隐藏)
  7. python的memcache使用如果对key设置了一个int型
  8. 分割gbk中文出现乱码的问题解决
  9. ftp一些东东
  10. [译]Stairway to Integration Services Level 18 – 部署和执行
  11. CoolBlog开发笔记第3课:创建Django应用
  12. vue 基础--&gt;进阶 教程(2): 指令、组件
  13. XCTF体验题库 : ReverseMe-120
  14. Vant-Weapp小程序+商城案例
  15. springboot在yml中配置控制台sql打印方法小结
  16. HDU--4486 Task(贪心)
  17. http--tomcat--memcached配置
  18. ansible常用ad hoc操作
  19. Redis数据类型及常用命名总结
  20. Java接口成员变量

热门文章

  1. ubuntu14.04 caffe
  2. wstngfw中配置squid
  3. js大数计算之计算
  4. Vue命名路由
  5. 树莓派二:apt-get出错、蓝牙、汉化、输入法
  6. selenium小结
  7. Linux shell循环遍历
  8. idou老师教你学istio 21:基于角色的访问控制
  9. cookies, session, token
  10. 复杂sql书写方法