變量
在Jinja2模板(1)中的例2中,{{name}}結構表示一個變量,它是一種特殊的佔位符,告訴模板引擎這個位置的值從渲染模板時使用的數據中獲取。
Jinja2能識別所有類型的變量。
可以使用過濾器修改變量:過濾器名添加在變量名之後,中間使用豎線分隔開,如,下面的模板以首字母大寫形式顯示變量name的值:
Hello, {{name | capitalize}}
Jinja2常用的過濾器:
1.safe:渲染值時不轉義(需要顯示變量中存儲的HTML代碼時候,可以使用safe過濾器,注:在不可信的值上不要使用此過濾器)
2.capitalize:把值的首字母轉換成大寫,其他字母轉換成小寫
3.lower:把值轉換成小寫形式
4.upper:把值轉換成大寫形式
5.title:把值中每個單詞的首字母都轉換成大寫
6.trim:把值的首尾空格去掉
7.striptags:渲染前把值中所有的HTML標籤都刪掉
控制結構
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 commets %} {{ render_comment(comment) }} {% endfor %} </ul>
4.若要重複使用宏,可將其保存在單獨的文件中,然後在需要使用的模板中導入
{% import 'macros.html' as macros %} <ul> {% for comment in comments %} {{ macros.render_comment(comment) }} {% endfor %} </ul>
5.模板繼承
首先,創建一個名爲base.html的基模板
<html> <head> {% block head %} <title>{% block title %}{% endblock %} - My Application </title> {% endblock %} </head> <body> {% block body %} {% endblock %} </body> </html>
block標籤定義的元素可以在衍生模板中修改。下例爲基模板的衍生模板:
{% extends "base.html" %} {% block title %} Index {% endblock %} {% block head %} {{ super() }} <style> </style> {% endblock %} {% block body %} <h1>Hello World!</h1> {% endblock %}