把数据库数据拿出来,塞到模板中就行,模板其实是一个包含响应文本的文件
使用真实值(数据库) 替换变量(模板语言),再返回最终得到的字符串(return render_template方法),这个过程称为“渲染”
render_template('模板名', key=value )
1-1.{# 注释 #}
1-2.{{变量代码块}} 可以任意写成python中的操作格式
1-3.{% 控制代码块 %} 声明一段区间
{{ 变量 }}
{% endfor %} 结束循环 {% endif %}
2.过滤器(这个器属于模板语言,就是个函数,处理作用) 比较像三元表达式,对管道符号 | 的使用
格式: {{ 变量 | 过滤器 | 过滤器 | 过滤器(参数)}}
内置过滤器:
str操作:
比较重要: safe 使用 safe 进行标识该字符串是安全的,可以把字符串中的html标签渲染出来,如果不设置则原样展示
即 <script>for (var i=0;i<10;i++){alert('哈哈')}</script> 当它是整体的字符串
首字母转成大写,其余字母转小写capitalize
把值转成小写lower
把值转成大写upper
把值中的每个单词的首字母都转成大写title
字符串反转reverse
格式化输出format
渲染之前把值中所有的HTML标签都删掉striptags
字符串截断truncate
list操作:
first:取第一个元素
last:取最后一个元素
length:获取列表长度
sum:列表求和 传参:{{ 变量 | sum(attribute='price') }} 求价格的和 attribute用ctl+p 看提示
sort:列表排序
3.自定义过滤器:两种添加方式
# 方式1:装饰器的形式 @app.template_filter('过滤器名字')
@app.template_filter('lireverse')
def do_lireverse(li):
# 将传入的列表生成一个新的列表
temp = list(li) 比较重要:如果执行列表反转的话,以后再用也是反转的,所以用一个变量接收下,原列表不变,对变量反转
# 反转
temp.reverse()
return temp
# 方式2:直接添加过滤器 add方法,加到过滤器列表中(过滤器函数, '过滤器名字'),还是装饰器添加方便
app.add_template_filter(do_lireverse, 'lireverse')
4.控制代码块
判断
{% if %}
{% elif %}
{% else %}
{% endif %} 别忘了结束
循环
{% for %}
{% endfor %}
for中的loop简便用法
loop.index 当前循环迭代的次数(从 1 开始)
loop.index0 当前循环迭代的次数(从 0 开始)
loop.revindex 到循环结束需要迭代的次数(从 1 开始)
loop.revindex0 到循环结束需要迭代的次数(从 0 开始)
loop.first 如果是第一次迭代,为 True 。
loop.last 如果是最后一次迭代,为 True 。
loop.length 序列中的项目数。
loop.cycle 在一串序列间期取值的辅助函数
6.模板代码复用
6-1.宏 macro 定义然后调用,像函数
定义:
{% macro input(name,value='',type='text') %} 定义 名字是input 的 宏,需要传入3个变量
<input type="{{type}}" name="{{name}}"
value="{{value}}" class="form-control">
{% endmacro %} 模板语言完整块结构
调用:
{{ input('name' value='zs')}} 传入参数
或者 封装成html文件,其它模板中导入使用
定义成函数形式 {% macro function()
引入使用{% import 'macro.html' as f %}
{% f.function() %}
6-2.继承 extends 留block 空 让子模板填入内容
父模板: 挖坑 {% block 坑的名字 %}
{% endblock %}
子模板: 先继承 {% extends '父模板名字' %}
{% block 坑的名字 %}
填入子模板自己的内容 , 如果需要父模板的内容 使用 {{ super() }} , 空还可以填css 和 js
{% endblock %}
6-3.包含 include (像页面嵌套)
{% include 'hello.html' ignore missing %}