jinja2 基础学习笔记

一.变量和过滤器 1.变量引用 在模板中使用的 {{ name }} 结构表示一个变量,它是一种特殊的占位符,告诉模 板引擎这个位置的值从渲染模板时使用的数据中获取。 Jinja2 能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象。在模板 中使用变量的一些示例如下: <p>A value from a dictionary: {{ mydict['key'] }}.</p> <p>A value from a list: {{ mylist[3] }}.</p> <p>A value from a list, with a variable index: {{ mylist[myintvar] }}.</p> <p>A value from an object's method: {{ myobj.somemethod() }}.</p>

2.过滤器 可以使用过滤器修改变量,过滤器名添加在变量名之后,中间使用竖线分隔。例如,下述 模板以首字母大写形式显示变量 name 的值: Hello, {{ name|capitalize }}

常用过滤器 safe 渲染值时不转义 capitalize 把值的首字母转换成大写,其他字母转换成小写 lower 把值转换成小写形式 upper 把值转换成大写形式 title 把值中每个单词的首字母都转换成大写 trim 把值的首尾空格去掉 striptags 渲染之前把值中所有的 HTML 标签都删掉 torsion 将给定对象转换为json表示

safe 过滤器值得特别说明一下。默认情况下,出于安全考虑,Jinja2 会转义所有变量。例 如,如果一个变量的值为 '<h1>Hello</h1>',Jinja2 会将其渲染成 '<h1>Hello</ h1>',浏览器能显示这个 h1 元素,但不会进行解释。很多情况下需要显示变量中存储 的 HTML 代码,这时就可使用 safe 过滤器。

3.默认配置 所有扩展名为 .html, .htm, .xml以及.xhtml的模版会开启自动转义. 模版可以利用{% autoescape %} 标签选择自动转义的开关

4.注册过滤器 可以手动添加到jinja_env 或者使用template_filter()装饰器 @app.template_filter('reverse') def reverse_filter(s): return s[::-1]

def reverse_filter(s): return s[::-1] app.jinja_env.filters['reverse'] = reverse_filter

二.控制结构 1.条件控制语句 {% if user %} Hello, {{ user }}! {% else %} Hello, Stranger! {% endif %}

2.for循环

<ul> {% for comment in comments %} <li>{{ comment }}</li> {% endfor %} </ul>

3.宏,类似于python的函数 {% macro render_comment(comment) %} <li>{{ comment }}</li> {% endmacro %}

<ul> {% for comment in comments %} {{ render_comment(comment) }} {% endfor %} </ul>

4.为了重复使用宏,我们可以将其保存在单独的文件中,然后在需要使用的模板中导入: {% import 'macros.html' as macros %}

<ul> {% for comment in comments %} {{ macros.render_comment(comment) }} {% endfor %} </ul>

需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免 重复: {% include 'common.html' %}

5.另一种重复使用代码的强大方式是模板继承,它类似于 Python 代码中的类继承。首先,创建一个名为 base.html 的基模板:

<html> <head> {% block head %} <title>{% block title %}{% endblock %} - My Application</title> {% endblock %} </head> <body> {% block body %} {% endblock %} </body> </html> block 标签定义的元素可在衍生模板中修改。在本例中,我们定义了名为 head、title 和body 的块。注意,title 包含在 head 中。下面这个示例是基模板的衍生模板: {% extends "base.html" %} {% block title %}Index{% endblock %} {% block head %} {{ super() }} <style> </style> {% endblock %} {% block body %} <h1>Hello, World!</h1> {% endblock %}

extends 指令声明这个模板衍生自 base.html。在 extends 指令之后,基模板中的 3 个块被 重新定义,模板引擎会将其插入适当的位置。注意新定义的 head 块,在基模板中其内容不是空的,所以使用super() 获取原来的内容

转载于:https://my.oschina.net/Traveller/blog/758770

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值