Jinjia2模板可以保存在任何基于文本的文件中,比如XML,HTML,CSV等,所有模板文件本身可以接受任何文件后缀。
Jinjia2模板由普通内容,变量,表达式,标签和注释组成
- 普通内容:
为没有特殊含义的内容,渲染模板时不对其进行解释
- 变量:
在Jinjia2 中可以定义变量,在渲染模板时变量会被替换为其他包含的值
- 表达式:
可以针对变量进行算术或逻辑操作。
- 标签
用于在渲染模板时进行逻辑操作
- 注释
渲染模板时会将注释内容从生成的文件中删除
{{....}}
用于输出变量或表达式
{{ varName }}
{%....%}
用于进行逻辑控制
{%for item in navigation %}
<li>
<a href="">{{ item }}</a>
</li>
{%endfor%}
{#....#}
用于注释
{# a comment #}
过滤器
过滤器通过管道符号“|”与变量连接,并且可以通过圆括号传递参数。
过滤器 | 说明 |
---|---|
abs(number) | 将被转换的变量转换为绝对值形成 |
attr(object,name) | 获得被转换的变量的指定属性 account attr('name')与account["name"]同效果 |
capitalize(s) | 将字符串的第一个字符转换为大写,之后的小写 |
center(value,width=80) | 接受一个字符串,将其置于80的长度中并居中,不足的字符使用空格填充 |
default(value,default_name="u",boolean=False) | 返回value指定的变量值,比如value是未定义的,则返回default_value指定的值,如果在value被指定为False时,也想用default_value替换,需要设置为Ture |
dictsort(value,case_sensitive=False,by='key') | value为要遍历的字典,case_sensitive指示是否立即加载,设置为False表示延迟加载,by表示以什么方式排序,默认以key键排序,也可以设置by=‘key’来以值排序 |
escape(string) | 把字符串的HTML特殊字符,转换为HTML表达方式 |
filesizeformat(value,binary=False) | 接受一个数值,返回让人容易阅读的形式,比如10KB,1.3MB,如果打开binary,显示以Mebi,Gibi形式展示 |
first(sequence) | 返回序列的第一个元素 |
float(value,default=0.0) | 将接受的value转换为float类型,如果转换失败则返回指定的default值 |
forcesscape(value) | 强制进行HTML转码,不检查要转码的字符串是否被标记为安全 |
format(value,*attribute) | 字符串格式化转化 |
groupby(value,attribute) | 按照指定的共有属性将集合进行分组,返回元祖组成的列表 |
indent(string,width=4,indentfirst=False) | 将接受的string每行缩进width指定的字符数,indentfirst用来指定首行是否缩进 |
int(value,default=0) | 将接受的value转换成int型,如果转换失败了,则返回default指定的值 |
join(value,d='u') | 接受一个序列类型的对象,返回用d指定的字符将所有序列元素连接在一起的字符串结果 |
last(seq) | 返回指定序列的最后一个元素 |
length(obj) | 返回序列或者字典的项数 |
lower(string) | 将接受的字符串转换为小写形式 |
pprint(value,verbose=False) | 漂亮地打印一个变量的值,多用于调试,verbose是否显示冗长的信息 |
random(seq) | 接受一个序列对象,随机返回其中一个元素 |
replace(string old,new, count=None) | 接受一个字符串,将其中old表示的子串替换成new指定的子串,count是指定替换次数,不指定则替换一次 |
reverse(value) | 接受一个可迭代的对象,返回逆序的迭代器 |
round(value,precision = 0,method='common') | 舍去运算,接受一个值,percision表示精度,common,ceil,floor分别为四舍五入,进位,舍去 |
safe(value) | 标记传入的value值是安全的,使用escape转码时不会进行二次转码 |
slice(value,slices,fill_width=None) | 切片,接受一个可迭代的对象,不足slices个则使用fill_width指定的对象进行填充 |
sort(value,reverse=False,case_sensitive=False,attribute=None) | 对可迭代的变量进行排序。默认情况下以升序,大小写不敏感的方式进行,如果变量本身包含属性,通过attribute参数按变量中属性排序 |
string(object) | 变成字符串类型 |
striptags(value) | 去除SGML,XML标签 |
sum(iterable,attribute=None,start=0) | 对可迭代变量进行求和,如果包含属性,可以设置attribute参数 |
title(s) | 将字符串转换为以标题形式显示 |
trim(value) | 去除字符串的前导和续尾空格 |
truncate(s,length=255,killwords=False,end='...') | 将字符串转换为简略形式,length截取长度,killWord设置是否保持单词完整性,end为简略写法后缀 |
upper(s) | 将字符串转换为大写 |
wordcount(s) | 计算字符串个数 |
wordwrap(s,width=79,break_long_words=True,wrapstring=None) | 将字符串按参数中的值进行分行处理 |
流程控制
1. 测试
测试时根据变量或表达式的值生成布尔结果的一种函数工具。要测试一个变量或表达式,则需要在变量后面加上一个is及测试 的名称。
{% if loop.index is divisibleby(3) %}
{{name is defined}}
函数名 | 说明 |
---|---|
allable(object) | 测试一个对象是否是可调用对象 |
defined(value) | 测试传入的对象是否已经被定义了 |
divisibleby(value,num) | 测试传入的数值是否可以被num整除 |
escaped(value) | 检查传入的对象是否被转码了 |
even(value) | 如果传入的数值是偶数,则返回True,否则返回False |
iterable(value) | 检查对象是否是可迭代的 |
lower(value) | 检查传入的字符串是否都是小写 |
none(value) | 检查对象是否是空对象None |
number(value) | 检查传入的数字是否是一个数字 |
odd(value) | 检查传入的数字是否为奇数 |
sameas(value,other) | 检查传入的对象和other指定的对象是否在内存相同的一块地址(同对象) |
sequence(value) | 检查对象是否是序列,序列同样是可迭代对象 |
string(value) | 检查对象是否是string |
undefined(value) | 检查一个对象是否未定义 |
upper(value) | 检查一个字符串是否全部大写 |
判断语句
{%if users%}
...
{%elif users.name%}
....
{%else %}
...
{%endif%}
循环
{%for user in users%}
...
{%endfor%}
for循环块特殊变量
变量 | 描述 |
---|---|
loop.index | 当前循环从1开始 |
loop.index() | 当前循环迭代次数从0开始 |
loop.revindex | 到循环结束需要迭代的次数,从1开始 |
loop.revindex() | 到循环结束需要迭代的次数,从0开始 |
loop.first | 如果是第一次迭代,则为True |
loop.last | 如果是最后一次迭代,则为True |
loop.length | 序列中的项目数量 |
loop.cycle | 在一串序列间取值的辅助函数 |
模板继承
基础模板
base.html
<html>
<head></head>
<title>base.html</title>
<body>
{%block conent %}
{% endblock %}
</body>
</html>
子类模板
sub.html
{% extends "base.html"%}
{%block content%}
<p>hhe</p>
{%endblock%}
网友评论