当前位置:   article > 正文

Python(Web时代)——jinja2模板

jinja2

简介

Jinja2是Flask框架默认支持的模板引擎,是python的web项目中被广泛应用的一种模板引擎,jinja2的作者与Flask是同一个人。

jinja2具有以下特点:

  • 非常灵活,提供了控制结构、表达式与继承等

  • 性能好

  • 可读性强

渲染一个模板,通过render_template方法即可

语法

引入渲染函数

使用之前需要先通过import 导入

from flask import render_template

注:要将模板文件放置在项目根目录的 templates文件夹中

在Jinja2中,存在三种语法

  • 变量取值 {{ }}

  • 控制结构(逻辑代码) {% %}

  • 注释 {# #}

示例1:变量取值 {{ }}

  1. @app.route("/tmp")
  2. def template_test():
  3. name = "我是字符串"
  4. num =1
  5. mylist = [1,2,3,4]
  6. mydict={"name":"张三","age":33}
  7. mytuple = (1,2,3,4)
  8. return render_template("template.html",name=name,num=num,mylist=mylist,mydict=mydict,mytuple=mytuple)
 

template.html 模板文件 

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. </head>
  5. <body>
  6. <p>字符串:{{ name }}</p>
  7. <p>数字:{{ num }}</p>
  8. <p>列表:{{ mylist }}</p>
  9. <p>列表中的第二个元素:{{ mylist[1] }}</p>
  10. <p>字典:{{ mydict }}</p>
  11. <p>字典的name:{{ mydict['name'] }}</p>
  12. <p>元组:{{ mytuple }}</p>
  13. <p>元组的第2个元素:{{ mytuple[1] }}</p>
  14. </body>
  15. </html>
 

调用结果

图片

示例2:控制结构 {% %}

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. </head>
  5. <body>
  6. <p>字符串:{{ name }}</p>
  7. <p>数字:{{ num }}</p>
  8. <p>列表:{{ mylist }}</p>
  9. <p>列表中的第二个元素:{{ mylist[1] }}</p>
  10. <p>字典:{{ mydict }}</p>
  11. <p>字典的name:{{ mydict['name'] }}</p>
  12. <p>元组:{{ mytuple }}</p>
  13. <p>元组的第2个元素:{{ mytuple[1] }}</p>
  14. {% if name=='张三' %}
  15. 条件满足,我是张三
  16. {% else %}
  17. 条件不满足
  18. {% endif %}
  19. 循环列表数据:
  20. {% for i in mylist %}
  21. {{ i }}
  22. {% endfor %}
  23. </body>
  24. </html>
 

调用结果

图片

示例3:注释 {# #}

  1. {# 循环列表数据:#}
  2. {% for i in mylist %}
  3. {{ i }}
  4. {% endfor %}

过滤器

有些时候需要对要在模板中的变量值做一些特殊处理,比如首字母大写,去掉前后空格、字符串拼接等等,这时就可以使用过滤器。

过滤器的使用

通过  |  来使用过滤器,与Linux中的管道类似

例如,将字符串的首字母大写

<p>{{ name | capitalize }}</p>

常用的过滤器

过滤器说明
safe渲染时值不转义
capitalize首字母大写,其他字母小写
lower所有字母小写
upper所有字母大写
title值中每个单词首字母大写
trim去除首尾空格
striptags渲染时删除掉值中所有HTML标签
  join拼接字符串
  replace替换字符串中的值
  round对数据进行四舍五入

示例代码

  1. @app.route("/tmp2")
  2. def template_test2():
  3. name = "harRY"
  4.     return render_template("template2.html",name=name)
 


template2.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. </head>
  5. <body>
  6. {# 首字母大写 #}
  7. <p>{{ name | capitalize }}</p>
  8. {# 单词全小写 #}
  9. <p>{{ "Hello World!" | lower }}</p>
  10. {# 去除首尾空格 #}
  11. <p>{{ " Hello World! " | trim }}</p>
  12. {# 四舍五入取整 #}
  13. <p>{{ 1.26 | round }}</p>
  14. {# 四舍五入保留2位小数取整 #}
  15. <p>{{ 1.2666 | round(2) }}</p>
  16. </body>
  17. </html>
 

调用

图片

自定义过滤器

当遇到现有的过滤无法满足我们的需求时,这时就需要我们自定义一个过滤器了

自定义过滤器有两种方式

方式1:@app.template_filter()

  1. # 第一种方式,用作计算字符串长度
  2. @app.template_filter()
  3. def str_len(args):
  4. return len(args)
 

方式2: 先定义方法,后采用 app.jinja_env.filters

  1. # 第二种方式, 去除字符串中的空格
  2. def replace_space(args):
  3. return args.replace(" ", "")
  4. app.jinja_env.filters['replace_space'] = replace_space
 

使用以上自定义的过滤器

  1. @app.route("/tmp3")
  2. def template_test3():
  3. name = "harRY"
  4. aaa="dfs jklf jffff "
  5. return render_template("template3.html", name=name,aaa=aaa)
 

template3.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. </head>
  5. <body>
  6. <p>{{ name | str_len }}</p>
  7. <p>{{ aaa | replace_space }}</p>
  8. </body>
  9. </html>
 

输出

图片

程序猿与投资生活实录已改名为  程序猿知秋,WX 公众号同款,欢迎关注!! 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/191410
推荐阅读
相关标签
  

闽ICP备14008679号