Flask Template模版引擎(Jinja2)
Flask利用Jinja2作为模版引擎。模版引擎包含了变量和表达式,当模版被渲染时,它们被替换为值和标签,它们控制着模版的逻辑。
Jinja2默认的几种分割符:
- {% … %} 表示声明
- { { … }} 表达式打印到模版输出
- {# … #} 对于未包含在模板输出中的注释
- # … ## 行语句
变量
传递给模版的上下文字典定义了模版的变量
通过{ { … }}在模版中打印变量
{
{ foo.bar }}
{
{ foo['bar'] }}
双花括号不是变量的一部分,而是打印语句。如果访问标签内的变量,在双花括号周围不要再次出现大括号。
如果变量或属性不存在,将会返回一个未定义的值,默认的行为是打印或迭代计算为空字符串,并且每次操作都会失败。
在Flask中如果需要加载静态文件的URL,有两种实现的方法:
<link rel='stylesheel' href='/static/css/style.css'>
<link rel='stylesheel' href='{
{ url_for('static', filename='css/style.css') }}'>
过滤器
变量可以通过过滤器进行修改。过滤器通过管道符合(|)与变量分开,并且可以在括号中包含可选参数。可以链接多个过滤器。一个过滤器的输出应用于下一个过滤器。
例如{ { name | striptags | length }}从name变量中移除所有的HTML标签,并计算长度进行打印输出。
接受参数的过滤器在参数周围有括号,就像函数调用一样。例如:{ { listx | join (‘,’) }}将以逗号为间隔将列表进行打印输出,与Python的str.join(‘,’, listx)相似。
转义
有时需要或必要让Jinja2忽略它会以变量或块的形式处理的部分。例如,如果使用迷人语法,你希望使用{ {作为模版中的原始字符串并且不启动变量。
{
{ '{
{' }}
对于更大的部分,将原始块标记为块是有意义的,使用{% raw %}。例如,要在模版中包含示例Jinja语法,且不执行代码。
{% raw %}
<ul>
{% for item in seq %}
<li>{
{ item }}