通过模板创建视图:
Flask中的jinja内置的模板语言,可以自动的生成HTML,还可以对数据进行某些修改后再将其显示在页面上。
Jinja的语法
Jinja是用Python实现的模板语言。模板语言是一种被设计来自动生成文档的简单文本格式。在模板语言中,一般都会把一些变量传给模板,替换模板的特定位置上预先定义好的占位变量名。在jinja中,变量名是由{{ }}来表示的。这种{{ }}语法叫做变量代码块,还有{% %}定义的控制代码块。可以实现一些语言层次的功能,比如循环或者if语句。
Jinja模板中的变量代码块可以是任意Python类型或者对象,只要它能够被Python的str()方法转换成一个字符串就行。比如,可以通过下面的方式显示一个字典或者列表中的某个元素:
{{ your_dict[‘key’] }}
{{ your_list[0] }}
过滤器
在jinja中可以把变量传给一些内建的函数来进行某些修改,以满足显示的需要,这些函数叫做过滤器(filter),在变量代码块中使用管道操作符 | 可以调用它们:
{{ variable | filter_name(*args) }}
如果没有任何参数要传给过滤器,则可以把括号省略掉:
{{ variable | filter_name}}
过滤器也可以在控制代码块中调用,这样就可以对一整块文字应用这个过滤器:
{% filter filter_name%}
文字内容
{% endfilter %}
Default
如果传给它的值是None,则用一个默认值来替代显示。
{{ post.date | default(‘2019-10-10’) }}
如果你希望变量在为假值的时候被替换成默认值,则可以把传给default的第2个参数设为True:
{{ ‘’ | default(‘An empty string’,True) }}
Escape
如果传递的变量是HTML字符串,则其中的&、<、>、’和”将被作为HTML转义序列打印:
{{ “<h1>Title</h1>” | escape}}
<h1>Title</h1>
Float
可使用Python的float()方法将传入值转换为浮点数显示:
{{ 75 | float}}
75.0
Int
可使用Python的int()方法将传入的值转换为整数显示:
{{ 75.7 | int}}
75
Join
这个过滤器将列表拼成一个字符串,与list的同名方法的作用完全一样。
{{ [‘Python’,’pymysql’] | join(‘,’) }}
Python,pymysql
Safe
如果想直接把HTML作为变量插入页面,在想显示一篇博客文章的时候,jinja会自动尝试对输出进行HTML转义。