1、Jinja2模板引擎
Jinja2 是一个现代的、功能强大的 Python 模板引擎。它用于将模板文件(通常是 HTML 文件,但也可以是其他文本格式)与数据结合起来,生成最终的文本输出。在 Web 开发中,特别是使用 Flask 等 Python Web 框架时,Jinja2 可以帮助开发者将动态数据嵌入到静态的 HTML 页面中,从而创建出具有交互性和动态性的网页。
下面创建一个模板的演示项目templateDemo,目录结构如下:
创建一个index.html文件,它是一个最小的模板,说明了一些模板使用的基础。内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Webpage</title>
</head>
<body>
<ul id="navigation">
{% for item in navigation %}
<li><a href="{
{item.href}}">{
{item.caption}}</a></li>
{% endfor %}
</ul>
<h3>welcome</h3>
{
{a_variable}}
</body>
</html>
这里有两种分隔符:{%...%}和{{...}}。前者用于执行诸如 for 循环语句或赋值的语句,后者用于把表达式的结果打印到模板上。
Flask应用把变量传递到模板,变量中也可以有能访问的属性或元素。可以使用点“.”来访问变量的属性,作为替代,也可以使用所谓的“下标”语法“[]”。
下面的两行效果是一样的:
{
{foo.bar}}
{
{foo['bar']}}
如果变量或属性不存在,会返回一个未定义值。
然后在app.py中加入以下的代码,用于渲染模板和向模板文件传递值。
from flask import Flask,render_template
app = Flask(_name_)
@app.route('/')
def index():
navigation = [
{
'href':'#',
'caption':'首页'
},
{
'href':'#',
'caption':'新闻'
},
{
href':'#',
'caption':'产品'
},
{
'href':'#',
'caption':'联系'
},
]
a_variable ='欢迎光临本网站'
context = {'navigation': navigation,'a_variable':a_variable}
return render_template('index.html',**context)
在代码中 navigation 是一个列表,里面存储了4个字典,用于模板中导航条的生成:a_variable 是一个字符串变量,用于显示一段欢迎词。将这两个变量分别用模板中定义的名字作为键,放到字典 context 中,在渲染模板时将 context一起传给模板。context 前面的**是将字典分解成函数的关键字参数的用法。运行程序后显示页面见图1-1。

下面解释模板中常用的一些语法。
(1)过滤器
变量可以通过过滤器修改。过滤器与变量用管道符号“|”分隔,并且也可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作后一个过滤器的输入。
例如:
{
{ name|striptags|title }}
过滤器会移除 name 中的所有HTML 标签并且改写标题样式的大小写
格式。
过滤器接受带圆括号的参数,如同函数调用。这个例子会把一个列表用逗号连接起来:
{
{list|join(',')}}
(2)注释
要把模板中一行的部分注释掉,默认使用{#…#}注释语法。这在调试或添加给自己或其他模板设计者的信息时是有用的:
{# note: disabled template because we no longer use this
{% for user in users %}
...
{% endfor %}
#}
(3)控制结构
控制结构指的是所有那些可以控制程序流的语句—条件语句(比如ielif、else)、for 循环语句、宏和块。控制结构在默认语法中以{%.%}块的形式出现。
1.for
遍历