Flask-Jinja2模板学习总结
来源:互联网 发布:好用的软件 编辑:程序博客网 时间:2024/05/16 17:22
1. 变量
表示方法 {{ name }} ,支持所有数据类型;过滤变量的方法是加载过滤器 {{ name | filter }},过滤器有系统的和自定义的。
I. 系统的为标准过滤器:
a. 字符串操作
{# 当变量未定义时,显示默认字符串,可以缩写为d #}
<p>{{ name | default('No name', true) }}</p>
{# 单词首字母大写 #}
<p>{{ 'hello' | capitalize }}</p>
{# 单词全小写 #}
<p>{{ 'XML' | lower }}</p>
{# 去除字符串前后的空白字符 #}
<p>{{ ' hello ' | trim }}</p>
{# 字符串反转,返回"olleh" #}
<p>{{ 'hello' | reverse }}</p>
{# 格式化输出,返回"Number is 2" #}
<p>{{ '%s is %d' | format("Number", 2) }}</p>
{# 关闭HTML自动转义 #}
<p>{{ '<em>name</em>' | safe }}</p>
{% autoescape false %}
{# HTML转义,即使autoescape关了也转义,可以缩写为e #}
<p>{{ '<em>name</em>' | escape }}</p>
{% endautoescape %}
<p>{{ name | default('No name', true) }}</p>
{# 单词首字母大写 #}
<p>{{ 'hello' | capitalize }}</p>
{# 单词全小写 #}
<p>{{ 'XML' | lower }}</p>
{# 去除字符串前后的空白字符 #}
<p>{{ ' hello ' | trim }}</p>
{# 字符串反转,返回"olleh" #}
<p>{{ 'hello' | reverse }}</p>
{# 格式化输出,返回"Number is 2" #}
<p>{{ '%s is %d' | format("Number", 2) }}</p>
{# 关闭HTML自动转义 #}
<p>{{ '<em>name</em>' | safe }}</p>
{% autoescape false %}
{# HTML转义,即使autoescape关了也转义,可以缩写为e #}
<p>{{ '<em>name</em>' | escape }}</p>
{% endautoescape %}
b. 数值操作
{# 四舍五入取整,返回13.0 #}
<p>{{ 12.8888 | round }}</p>
{# 向下截取到小数点后2位,返回12.88 #}
<p>{{ 12.8888 | round(2, 'floor') }}</p>
{# 绝对值,返回12 #}
<p>{{ -12 | abs }}</p>
<p>{{ 12.8888 | round }}</p>
{# 向下截取到小数点后2位,返回12.88 #}
<p>{{ 12.8888 | round(2, 'floor') }}</p>
{# 绝对值,返回12 #}
<p>{{ -12 | abs }}</p>
c. 列表操作
{# 取第一个元素 #}
<p>{{ [1,2,3,4,5] | first }}</p>
{# 取最后一个元素 #}
<p>{{ [1,2,3,4,5] | last }}</p>
{# 返回列表长度,可以写为count #}
<p>{{ [1,2,3,4,5] | length }}</p>
{# 列表求和 #}
<p>{{ [1,2,3,4,5] | sum }}</p>
{# 列表排序,默认为升序 #}
<p>{{ [3,2,1,5,4] | sort }}</p>
{# 合并为字符串,返回"1 | 2 | 3 | 4 | 5" #}
<p>{{ [1,2,3,4,5] | join(' | ') }}</p>
{# 列表中所有元素都全大写。这里可以用upper,lower,但capitalize无效 #}
<p>{{ ['tom','bob','ada'] | upper }}</p>
<p>{{ [1,2,3,4,5] | first }}</p>
{# 取最后一个元素 #}
<p>{{ [1,2,3,4,5] | last }}</p>
{# 返回列表长度,可以写为count #}
<p>{{ [1,2,3,4,5] | length }}</p>
{# 列表求和 #}
<p>{{ [1,2,3,4,5] | sum }}</p>
{# 列表排序,默认为升序 #}
<p>{{ [3,2,1,5,4] | sort }}</p>
{# 合并为字符串,返回"1 | 2 | 3 | 4 | 5" #}
<p>{{ [1,2,3,4,5] | join(' | ') }}</p>
{# 列表中所有元素都全大写。这里可以用upper,lower,但capitalize无效 #}
<p>{{ ['tom','bob','ada'] | upper }}</p>
d. 字典列表操作
{% set users=[{'name':'Tom','gender':'M','age':20},
{'name':'John','gender':'M','age':18},
{'name':'Mary','gender':'F','age':24},
{'name':'Bob','gender':'M','age':31},
{'name':'Lisa','gender':'F','age':19}]
%}
{# 按指定字段排序,这里设reverse为true使其按降序排 #}
<ul>
{% for user in users | sort(attribute='age', reverse=true) %}
<li>{{ user.name }}, {{ user.age }}</li>
{% endfor %}
</ul>
{# 列表分组,每组是一个子列表,组名就是分组项的值 #}
<ul>
{% for group in users|groupby('gender') %}
<li>{{ group.grouper }}<ul>
{% for user in group.list %}
<li>{{ user.name }}</li>
{% endfor %}</ul></li>
{% endfor %}
</ul>
{# 取字典中的某一项组成列表,再将其连接起来 #}
<p>{{ users | map(attribute='name') | join(', ') }}</p>
{'name':'John','gender':'M','age':18},
{'name':'Mary','gender':'F','age':24},
{'name':'Bob','gender':'M','age':31},
{'name':'Lisa','gender':'F','age':19}]
%}
{# 按指定字段排序,这里设reverse为true使其按降序排 #}
<ul>
{% for user in users | sort(attribute='age', reverse=true) %}
<li>{{ user.name }}, {{ user.age }}</li>
{% endfor %}
</ul>
{# 列表分组,每组是一个子列表,组名就是分组项的值 #}
<ul>
{% for group in users|groupby('gender') %}
<li>{{ group.grouper }}<ul>
{% for user in group.list %}
<li>{{ user.name }}</li>
{% endfor %}</ul></li>
{% endfor %}
</ul>
{# 取字典中的某一项组成列表,再将其连接起来 #}
<p>{{ users | map(attribute='name') | join(', ') }}</p>
e. Flask内置过滤器
Flask提供了一个内置过滤器”tojson”,它的作用是将变量输出为JSON字符串。这个在配合Javascript使用时非常有用。
<script type="text/javascript">
var users = {{ users | tojson | safe }};
console.log(users[0].name);
</script>
var users = {{ users | tojson | safe }};
console.log(users[0].name);
</script>
注意,这里要避免HTML自动转义,所以加上safe过滤器。
II. 语句块过滤
Jinja2还可以对整块的语句使用过滤器。
{% filter upper %}
This is a Flask Jinja2 introduction.
{% endfilter %}
This is a Flask Jinja2 introduction.
{% endfilter %}
III. 自定义过滤器
def double_step_filter(l): return l[::2]app.add_template_filter(double_step_filter, 'double_step')#另外一种方式@app.app_template_filter('double_step')def double_step_filter(l): return l[::2]两种方式均可自定义过滤器,定义后可以直接在模板中使用。
2. 控制结构
条件控制
if...else...endif判断条件是否符合,并执行相应的语句
循环
for...endfor
用于渲染一组元素
用于渲染一组元素
宏
macro...endmacro
类似函数
定义一个宏,指定宏的名称、参数,调用
类似函数
定义一个宏,指定宏的名称、参数,调用
{% macro x(y) %} ...{% endmacro %}{{ x(y) }}如果需要在多个模板中复用,可以将宏的定义放入一个文件,‘macro.html’,然后导入使用
import 'macro.html' as macro{{ macro.x(y) }}
继承
如果多个页面的大部分内容相同,可以定义一个母模板,包含相同的内容,然后子模板继承内容,并根据需要进行部分修改base.html,母模板,其中,用{% block title %}...{% endblock %}定义了可以由子模板替换的区域,title是区块的名称,可以有多个区块。在子模板中,声明继承的母模板,然后用{% block title %}...{% endblock %}指定替换哪个区块的内容,并填入自己的内容。子模板中没有指定的区块,默认使用母模板的内容
{% extends "base.html" %}{% block title %}john{% endblock %}如果希望能够保留母版的内容,并添加新内容,可以使用super()
{% extends "base.html" %}{% block title %} {{ super() }} john{% endblock %}模板里面,不能同时有两个{% extends " " %}语句,即使另一个被注释了也不行
包含
如果多个网页中都有一段内容相同,可以将相同的内容放入一个文件中comments.html,通过include导入
{% include 'comments.html' %}
{% include 'comments.html' %}
3. 自定义错误页面
像常规路由一样,Flask 允许程序使用基于模板的自定义错误页面。最常见的错误代码有两个:404,客户端请求未知页面或路由时显示;500,有未处理的异常时显示。
@app.errorhandler(404)def page_not_found(e): return render_template('404.html'), 404
4. 标准上下文
下面全局变量默认在 Jinja2 模版中可用:
config
当前配置对象 (flask.config)New in version 0.6.
Changed in version 0.10: 现在一直可用,即使是导入的模版。
request
当前请求对象 (flask.request)session
当前会话对象 (flask.session)g
实现全局变量的请求范围的对象 (flask.g)url_for()
flask.url_for() 函数。get_flashed_messages()
flask.get_flashed_messages() 函数。5. 上下文处理器
Flask 中的上下文处理器自动向模板的上下文中插入新变量。上下文处理器在模板 渲染之前运行,并且可以在模板上下文中插入新值。上下文处理器是一个返回字典的函数。 这个字典的键值将与应用中的所有模板上下文结合:
@app.context_processordef inject_user(): return dict(user=g.user)变量不仅限于值;一个上下文处理器也可以使函数在模板中可用(由于 Python 允许传递函数):
@app.context_processordef utility_processor(): def format_price(amount, currency=u'€'): return u'{0:.2f}{1}.format(amount, currency) return dict(format_price=format_price)上面的上下文处理器使得 format_price 函数在所有模板中可用:
{{ format_price(0.33) }}
阅读全文
0 0
- Flask-Jinja2模板学习总结
- Flask学习总结笔记(3)-- Jinja2模板引擎之一
- Python学习:Flask框架和jinja2模板
- Flask Jinja2模板
- Flask学习总结笔记(4)-- Jinja2模板引擎之二
- Flask web 开发 Jinja2 模板
- Flask中的Jinja2模板使用
- Flask +jinja2+bootstrap+sqlite3+sqlalchemy构建web基础学习总结
- Flask模板引擎——Jinja2
- Flask入门(二)Jinja2 模板
- Flask(Jinja2) 服务端模板注入漏洞
- flask jinja2
- flask--jinja2
- Flask笔记(2)--flask的jinja2模板引擎
- Flask——Jinja2 学习笔记
- Python Flask Web 第四课 —— 模板引擎Jinja2
- Flask的jinja2模板中自定义过滤器的使用
- Flask系列教程(3)——Jinja2模板
- dumpsys meminfo执行流程(三)
- C++ Primer Plus 读书笔记——C++的基本特征
- python 数据分析
- 日期计算
- C语言运算符优先级列表(超详细)
- Flask-Jinja2模板学习总结
- Calling Circles UVA
- 动态链接库重定向
- Spring Cloud 中使用zookeeper作为服务注册中心与配置中心
- java中如何去理解 类,对象(实例),方法,类变量,对象(实例)变量的区别与联系
- ViewController生命周期
- PHP多台服务器跨域SESSION共享
- 【SpringMVC】Ajax
- Eclipse常用快捷键