用法:render_template(⽂件名,key=value)
模板文件一般默认路径为/templates下的文件,可通过key=value的方式往模板文件中传递参数,模板中使用{{key}}的方式获取参数。
例:
@app.route("/")
def index():
........
return render_template("index.html")
获取变量:{{变量}}
if条件语句:{%if条件%}语句{%else%}语句{%endif%}
for循环:{%for 变量 in 容器%}语句{%endfor%}
for循环中特殊变量
变量 | 描述 |
---|---|
loop.index | 当前循环迭代的次数(从 1 开始) |
loop.index0 | 当前循环迭代的次数(从 0 开始) |
loop.revindex | 到循环结束需要迭代的次数(从 1 开始) |
loop.revindex0 | 到循环结束需要迭代的次数(从 0 开始) |
loop.first | 如果是第一次迭代,为 True 。 |
loop.last | 如果是最后一次迭代,为 True 。 |
loop.length | 序列中的项目数。 |
loop.cycle | 在一串序列间期取值的辅助函数。见下面示例程序。 |
1.系统自带过滤器:
字符串过滤器:
使用格式:{{字符串|过滤器}}
过滤器 | 描述 |
---|---|
safe | 禁用转义 |
capitalize | 首字母大写,其余小写 |
lower | 转换为小写 |
upper | 转换为大写 |
title | 每个单词首字母大写,其余小写 |
reverse | 字符串反转 |
format | 格式化输出 |
striptags | 把HTML标签删掉 |
列表过滤器:
使用格式:{{列表|过滤器}}
过滤器 | 描述 |
---|---|
first | 取第一个元素 |
last | 取最后一个元素 |
length | 获取列表长度 |
sum | 列表求和 |
sort | 列表排序 |
语句块操作:
{% filter upper %}
#一大堆文字#
{% endfilter %}
链式调用:
{{ "hello world" | reverse | upper }}
2.自定义过滤器:
直接添加到过滤器列表:
def do_listreverse(li):
# 通过原列表创建一个新列表
temp_li = list(li)
# 将新列表进行返转
temp_li.reverse()
return temp_li
app.add_template_filter(do_listreverse,'lireverse')
使用装饰器添加:
@app.template_filter('lireverse')
def do_listreverse(li):
# 通过原列表创建一个新列表
temp_li = list(li)
# 将新列表进行返转
temp_li.reverse()
return temp_li
1.宏(macro):
(1)定义格式:{% macro 宏名(参数) %} {%endmacro%}
(2)使用格式:
当前文件:使⽤当前⽂件宏: {{ 宏名(参数) }}
其他文件:{% import ‘宏⽂件名’ as 别名%} {{ 别名.宏名(参数) }}
2.继承(extends):
(1)特点: 共性抽取, 代码复⽤
(2)格式: {% extends ‘⽗⽂件名’%}
(3)注意点:
父类:父类与子类可能不同的地方用block代码块写,方便子类重写
子类:可根据需求重写父类block代码块,可使用{{super()}}调用父类block内容
3.包含(include):
(1)特点:将⼀个⽂件的内容,完全拷⻉到另外⼀个⽂件中,不够灵活
(2)格式: {% include ‘⽂件名’ ignore missing%},ignore missing可不写,但是找不到目标文件会报错
1.特点: 不需要重flask程序⾥⾯,传递到模板就可以直接使⽤的
2.特殊变量及函数:
特殊变量/函数 | 描述 |
---|---|
config | app的配置对象,和flask⾥⾯的app.config是⼀回事 |
request | 请求对象 |
g | 应⽤上下⽂对象 |
url_for() | 通过函数名,解析到所对应的路径 |
get_flashed_messages() | 消耗, flash()⽅法⾥⾯存储的信息 |
flash存储数据的时候,⽤到了session所以需要设置SECRET_KEY