【转载】Jinja2 语法简介

举报
oysterzz 发表于 2021/12/29 19:27:24 2021/12/29
【摘要】 一.Jinja2语法基本语法看过之前模板的例子就知道,Jinja2构成的模板文件中,文本内容大致可以分三种。1  变量取值或者宏调用 {{ }}2  控制结构 {% %}3  注释 {# #}  1      jinja2变量jinja2模板中使用 {{ }} 语法表示一个变量,它是一种特殊的占位符。当利用jinja2进行渲染的时候,它会把这些特殊的占位符进行填充/替换,jinja2支持py...

一.Jinja2语法基本语法


看过之前模板的例子就知道,Jinja2构成的模板文件中,文本内容大致可以分三种。

1  变量取值或者宏调用 {{ }}

2  控制结构 {% %}

3  注释 {# #}

  

1      jinja2变量

jinja2模板中使用 {{ }} 语法表示一个变量,它是一种特殊的占位符。当利用jinja2进行渲染的时候,它会把这些特殊的占位符进行填充/替换,jinja2支持python中所有的Python数据类型比如列表、字段、对象等。

1.png

2      jinja2结构控制

if语句

jinja2中的if语句类似与Pythonif语句,它也具有单分支,多分支等多种结构,不同的是,条件语句不需要使用冒号结尾,而结束控制语句,需要使用endif关键字

2.png


For循环

jinja2中的for循环用于迭代Python的数据类型,包括列表,元组和字典。在jinja2中不存在while循环

3.png

 

4.png


for循环中,jinja2还提供了一些特殊的变量,用以来获取当前的遍历状态:

变量

描述

loop.index

当前迭代的索引(从1开始)

loop.index0

当前迭代的索引(从0开始)

loop.first

是否是第一次迭代,返回bool

loop.last

是否是最后一次迭代,返回bool

loop.length

序列中的项目数量

loop.revindex

到循环结束的次数(从1开始)

loop.revindex0

到循环结束的次数(0开始)

5.png

3      jinja2注释

{{# 这是注释 #}}

 Set语句

模板中变量的值似乎只有一个来源,就是来自于后端的提供。但是实际上我们可以在模板这个层面对变量进行赋值,就是通过了{% set variable_name="value" %}的形式。这赋予了模板在内部进行变量赋值的能力,提高了灵活性。也可以set一个变量的值为某个函数的返回值

二.jinja2中的过滤器

  变量可以通过过滤器进行修改,过滤器可以理解为是jinja2里面的内置函数和字符串处理函数。

  常用的过滤器有:

过滤器名称

    说明    

safe

 渲染时值不转义

capitialize

 把值的首字母转换成大写,其他子母转换为小写

 lower

 把值转换成小写形式 

 upper

 把值转换成大写形式 

 title

 把值中每个单词的首字母都转换成大写

 trim

 把值的首尾空格去掉

 striptags

 渲染之前把值中所有的HTML标签都删掉

join 

 拼接多个值为字符串

 replace

 替换字符串的值

 round

 默认对数字进行四舍五入,也可以用参数进行控制

int 

 把值转换成整型

   那么如何使用这些过滤器呢? 只需要在变量后面使用管道(|)分割,多个过滤器可以链式调用,前一个过滤器的输出会作为后一个过滤器的输入。

6.png

 

  三jinja2的宏

  宏类似于Python中的函数,我们在宏中定义行为,还可以进行传递参数,就像Python中的函数

  在宏中定义一个宏的关键字是macro,后面跟其 宏的名称和参数等

7.png




四.jinja2的继承和Super函数

jinja2中最强大的部分就是模板继承。模板继承允许我们创建一个基本(骨架)文件,其他文件从该骨架文件继承,然后针对自己需要的地方进行修改。

jinja2的骨架文件中,利用block关键字表示其包涵的内容可以进行修改。

以下面的骨架文件base.html为例:

8.png

  

这里定义了四处 block,即:headtitlecontentfooter。如何继承修改注意看下面的文件

9.png

  

 其他没修改的地方则继承

PS: super()函数 表示获取block块中原来定义的内容。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。