目录
模板中变量的使用:
1.语法:
{{value}} 规则是可以变更的也可以这样写{{{value}}},不过没必要。
添加你想要的数据,然后再index.html中进行渲染
这是最终展现在页面上的内容
2.dict类型数据渲染:
{{object.attribute}}或{{object['attribute']}}
3.list/tuple类型数据的渲染
元组或者列表可直接通过他们的索引就可以直接找到相应的关系
4.list/tuple嵌套dict复杂类型数据渲染
先通过列表的索引找到你想要查找的数据,再去选择里面相对应的内容就可以了。
5.模板标签
语法:{{% tag%}}
可以用 if else break continue for循环,标签中可包含if 条件语句判断
例如:{{% if condition_a%}}
满足了条件a
{{% else if condition_b%}}
满足了条件b
{{% else if%}}
都不满足就执行最后一个
{{% endif %}}
有开头就肯定有结尾,写完头if,记得先写上endif,再写里面的内容
for循环:
{{% for key,value in data.items() %}}
{{key}}:{{value}}
{{% else %}}
条件不满足执行这里
{{% endfor %}}
for循环体内的变量
loop.first:如果是第一次迭代,就是True
loop.last: 如果是最后一次迭代就是True
loop.length: 序列的长度
loop.cycle:在一串序列间期取值的辅助函数
如果想要每行都是不同的样式可以在style中设置两个颜色,一个为odd,一个为even
用的时候 直接在<p>标签中添加样式就可以
如何在for循环中想要使用break/continue:
6.添加注释:
不会显示在浏览器的HTML中{# 我是注释 #}
去除HTML中多余空白
在块开始或者结束放置一个减号(-),不能有空格。
内置的判断条件:
defined/undefined- 变量是否被定义了
none- 变量是否为None
number/string- 数字/字符串的判断
even-odd- 奇偶数的判断
upper/lower- 大小写的判断
if标签中的其他逻辑控制:
比如:
and ,or ,
==,!=,
<,>,
<=,>=,
in,not in
模板标签with:
with 块级作用域,只在这个块里面有效
{% with %}
{}
{{% endwith %}}
raw标签:
{% raw %}
这里面的内容会以字符串的格式显示出来
{% endraw %}
过滤器的使用:
修改变量(如:格式化显示)
用管道符号(|)分割 {{name|striptags}}
可以链式调用 {{name|striptags|title}}
可以用圆括号来传递一个参数{{list|join(',')}}
内置过滤器:
求绝对值:
{{value|abs}}
默认值的显示:
default(value,default_value='',boolean=False)
例如:{{value|default('默认值')}}
{{value|d('默认值')}}
html转义:
{{value|escape}} 或 {{value|e}}
autoescape 为flase 是为了吧自动转义关掉。
就是把h2的角标转义成字符
富文本内容转义显示:
{{value|safe}}
倒序显示:
{{value|reverse}}
自定义过滤器:
@app.template_filter('reverse')
def reverse_filter('s')
return s[::-1]
使用: {{ phone_number|reverse_filter }}
模板全局函数:
range([start]stop[,step])
dict(**items)f
cycler(*items)--可用于css的类名的循环
joer(sep=',')--可用于字符串的拼接
url_for解析函数(如:静态文件地址解析/链接跳转地址解析)
模板中的宏macro:
macro同样的模板代码写成函数并进行复用
定义宏{% macro 宏名(参数) %}代码块{% endmacro %}
导入宏{% import '宏文件' as 别名 %}
使用宏{{ 别名.宏名(参数) }}
也可以把宏写入单独的一个HTML文件中
用的时候导入宏{% import 'form.html' as forms%}
调用的时候就像调用函数一样就行,比传参数是name,type是类型,value是默认值
模板的继承与包含:
继承extends:
extends继承是为了复用模板中的公共内容:
把可变的内容包裹起来,重复的内容就还在里面
{% block 名字 %}{% endblock %}
可写入html文件中,然后再用extends继承,中间的block就写你想要的内容
子模板{% extends '父模板的名字' %}
复用父类模板的使用:
{% extends %}
{% block header %}
{{ super() }}
<!--新的菜单内容-->
{% enblock%}
当前页面的代码复用:
<title>{% block title %}{% endblock %}</title>
<h1> {{self.title() }}</h1>
{% block content%}
{% endblock %}
包含include:
include在A、B、C页面都有就他页面没有这个
{% include '文件夹/模板文件' %} 直接引用就可以了。include的两个参数:
ignore missing 如果模板不存在,jinja2会忽略这条语句
with context/without context 是否携带当前上下文
消息闪现:
第一步:在视图中产生一个消息(提示/警告/错误)
flash(msg_content,msg_type)
msg_content:消息内容
msg_type:消息类型
第二部:在模板中展示消息
get_flashed_message(category_filter=['erro'])
category_filter:对产生的消息按类查询
<ul class = flashes>
{% for category,message in get_flashes_mesage(woth_categories=true)%}
<li class = '{{category}}'>{{message}}</li>
{% endfor %}
</ul>