Flask学习笔记之模板引擎Jinja2(四)

随着程序内容改变,视图函数也有可能需要变化。模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask 使用了一个名为 Jinja2 的强大模板引擎。

变量

{{ name }}结构表示一个变量,它是一种特殊的占位符,告诉模板引擎这个位置的值从渲染模板时使用的数据中获取。Jinja2 能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象。

可以使用过滤器修改变量,过滤器名添加在变量名之后,中间使用竖线分隔。例如,{{ name|capitalize }} (capitalize first letter)。

过滤器名 说明
safe 渲染值时不转义
capitalize 把值的首字母转换成大写,其他字母转换成小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的 HTML 标签都删掉

控制标记

Jinja中2的控制标记包括:

  • 条件判断标记(if/elif/else),
  • 循环控制(for-loop)
  • macro(宏)
  • block (模板继承)
# 条件判断
{% if user %}Hello, {{ user }}!
{% else %}Hello, Stranger!
{% endif %}

# 循环
    {% for comment in comments %}
  • {{ comment }}
  • {% endfor %}
# macro (相当于function) {% macro render_comment(comment) %}
  • {{ comment }}
  • {% endmacro %}
      {% for comment in comments %} {{ render_comment(comment) }}{% endfor %}
    # 重复使用macro {% import 'macros.html' as macros %}
      {% for comment in comments %}{{ macros.render_comment(comment) }} {% endfor %}

    模板继承:

     
     
     
        {% if title %} 
            {{ title }} - microblog 
        {% else %} 
            Welcome to microblog 
        {% endif %} 
     
    
     
        
    Microblog: Home

    {% block content %}{% endblock %}
    
    {% extends "base.html" %}
    {% block content %} 
        

    Hi, {{ user.nickname }}!

    {% for post in posts %}

    {{ post.author.nickname }} says: {{ post.body }}

    {% endfor %} {% endblock %}

    参考资料:
    The Flask Mega-Tutorial, Part II: Templates
    Jinja2 简明使用手册
    《Flask Web开发》

    你可能感兴趣的:(Flask学习笔记之模板引擎Jinja2(四))