1. 模板传参
单参数
- 前端参数化
- 模板放在templates文件夹下,默认加载templates目录下文件
- 如果只有一个参数,直接在render_template函数中添加参数即可
- 使用
{{ * }}
获取变量
@app.route('/')
def index():
return render_template('demotest.html', name='hjk')
<body>
<p>hello, {{ name }}</p>
</body>
输出结果如下图:
多参数
- 方法1: 对象取值
- 可以使用
{{ params[property ]}}
或{{ params.property }}
访问模型中的属性或字典
+ @app.route('/')
def index():
d = {'name': 'hjk', 'age': 18}
return render_template('demotest.html', p=d)
<body>
<p>hello, {{ p.name }}</p>
<p>hello, {{ p['age'] }}</p>
</body>
输出结果如下图:
- 方法2:传参解包
- 可以先把所有参数放在字典中,然后在render_template中使用两个
**
解包传参
@app.route('/')
def index():
d = {'name': 'hjk', 'age': 18}
return render_template('demotest.html', **d)
<body>
<p>hello, {{ name }}</p>
<p>hello, {{ age }}</p>
</body>
设置变量
- 前端模板设置变量
<body>
{% set name='hjk' %}
<p>hello, {{ name }}</p>
</body>
2. 逻辑分支
if分支
- 案例说明:如果age>18岁,输出name,否则给出提示
- 注意结尾的
{% endif %}
@app.route('/')
def index():
d = {'name': 'hjk', 'age': 18}
return render_template('demotest.html', **d)
<body>
{% if age>18 %}
<p>hello, {{ name }}</p>
{% else %}
<p>sorry, 您未成年,请在监护人的陪同下使用监护人的账号登陆</p>
{% endif %}
</body>
for循环
- 字典、列表的遍历与python基本类似
@app.route('/')
def index():
d = [{'name': 'hjk', 'age': 18},
{'name': 'hjl', 'age': 19},
{'name': 'hjt', 'age': 12}]
return render_template('demotest.html', P=d)
<body>
{% for p in P %}
{% if p.age>18 %}
<p>hello, {{ p.name }}</p>
{% else %}
<p>sorry, 您未成年,请在监护人的陪同下使用监护人的账号登陆</p>
{% endif %}
{% endfor %}
</body>
- loop
- loop.index : 获取当前迭代的次数(从1开始)
- loop.index0 :从0开始计数(从0开始)
- loop.revindex : 到循环结束需要迭代的次数(从1开始)
- loop.revindex0 : 到循环结束需要迭代的次数(从0开始)
- loop.first : 判断是否是第一个,返回True/False
- loop.last : 判断是否是最后一个,返回True/False
@app.route('/')
def index():
d = [{'name': 'hjk', 'age': 18},
{'name': 'hjl', 'age': 19},
{'name': 'hjt', 'age': 12}]
return render_template('demotest.html', P=d)
<body>
{% for p in P %}
<p>{{ loop.first }}</p>
<p>{{ loop.revindex0 }}</p>
{% endfor %}
</body>
- jinja2模版生成页面时会产生大量空行和空格解决办法:
{%- if * -%}
...
{%- endif -%}
{%- for p in P -%}
...
{%- endfor -%}