08 flask模版 jinja2 传值,控制块,过滤器
模板的语法:
1. 在模板中获取view中传递的变量值:{{ 变量名key }}
render_template('模板网页名字',key=value,key=value)
可传递类型:
name = '沈凯' # str
age = 18 # int
friends = ['建义', '陈璟', '小岳岳', '郭麒麟'] # list
dict1 = {'gift': '大手镯', 'gift1': '鲜花', 'gift2': '费列罗'} # dict
girlfriend = Girl('美美', '安徽阜阳') # 自定义的类构建的类型:Girl对象
模板网页中或取传递的数据:
{{ list.0 }} 同 {{ list[0] }}
{{ dict.key }} 同 {{ dict.get(key) }}
{{ girl.name }} 同 {{ 对象.属性 }}
2. 控制块:
{% if 条件 %}
条件为True
{% else %}
条件为False
{% endif %}
=====================================
{% for 变量 in 可迭代的对象 %}
for循环要做的任务
{% endfor %}
=====================================
for循环中可以使用loop变量
loop.index 序号从1开始
loop.index0 序号从0开始
loop.revindex reverse 序号是倒着的
loop.revindex0
loop.first 布尔类型 是否是第一行
loop.last 布尔类型 是否是第二行
{% for user in users %} <tr {% if loop.index == 3 %} style="background-color: deeppink" {% endif %}> <td> {{ loop.index }}</td> <td>{{ user.username }}</td> <td>{{ user.password }}</td> <td>{{ user.addr }}</td> <td>{{ user.phone }}</td> </tr> {% endfor %}
3.过滤器
过滤器的本质就是函数
模板语法中过滤器:
{{ 变量名 | 过滤器(*args) }}
{{ 变量名 | 过滤器 }}
常见的过滤器:
1. safe : 禁用转译
msg = '<h1>520快乐!</h1>'
return render_template('show_2.html', girls=girls, users=users, msg=msg)
不想让其转译标签:
{{ msg | safe }}
2. capitalize:单词的首字母大写
{{ n1 | capitalize }}
3.lower和upper:大小写的转换
4.title 一句话中每个单词的首字母大写
msg = 'She is a beautiful girl'
{{ msg | title}}
5.reverse 翻转
{{ n1 | reverse}}
6.format
{{ '%s is %d years old' | format('lily',18) }}
7.truncate 字符串截断
list的操作:
{# 列表过滤器的使用 #}
{{ girls | first }} #列表第一个值
{{ girls | last }} #列表最后一个值
{{ girls | length }} #列表长度
{{ girls | sum }} #整型列表求和
{{ [1,3,5,7,9] | sum }}
{{ [1,8,5,7,3] | sort }} #整形列表排序
dict:
{% for v in users.0.values() %} ---->获取值
<p>{{ v }}</p>
{% endfor %}
<hr>
{% for k in users.0.keys() %} ----》获取键
<p>{{ k }}</p>
{% endfor %}
<hr>
{% for k,v in users.0.items() %} ---》获取键值
<p>{{ k }}---{{ v }}</p>
{% endfor %}
自定义过滤器两种方式(若和默认过滤器重名,会覆盖默认过滤器):
1.app.add_template_filter(函数名, '别名')
def replace_hello(value): #自定义一个替换字符串hello的过滤器
value = value.replace('hello', '')
return value.strip() # 必须将结果返回,strip()去除字符串两段空格
app.add_template_filter(replace_hello, 'replace') #将函数定义为过滤器
模板中使用:{{ msg | replace }}
2.第二种方式 装饰器
@app.template_filter('listreverse')
def reverse_list(li):
temp_li = list(li)
temp_li.reverse()
return temp_li
模板中使用:{{ li | listreverse }}