jinja2模板用法詳解


渲染模板

用法:render_template(⽂件名,key=value)
模板文件一般默認路徑爲/templates下的文件,可通過key=value的方式往模板文件中傳遞參數,模板中使用{{key}}的方式獲取參數。
例:

@app.route("/")
def index():
	........
	return render_template("index.html")

語法

獲取變量:{{變量}}
if條件語句:{%if條件%}語句{%else%}語句{%endif%}
for循環:{%for 變量 in 容器%}語句{%endfor%}
for循環中特殊變量

變量 描述
loop.index 當前循環迭代的次數(從 1 開始)
loop.index0 當前循環迭代的次數(從 0 開始)
loop.revindex 到循環結束需要迭代的次數(從 1 開始)
loop.revindex0 到循環結束需要迭代的次數(從 0 開始)
loop.first 如果是第一次迭代,爲 True 。
loop.last 如果是最後一次迭代,爲 True 。
loop.length 序列中的項目數。
loop.cycle 在一串序列間期取值的輔助函數。見下面示例程序。

過濾器

1.系統自帶過濾器:
字符串過濾器:
使用格式:{{字符串|過濾器}}

過濾器 描述
safe 禁用轉義
capitalize 首字母大寫,其餘小寫
lower 轉換爲小寫
upper 轉換爲大寫
title 每個單詞首字母大寫,其餘小寫
reverse 字符串反轉
format 格式化輸出
striptags 把HTML標籤刪掉

列表過濾器:
使用格式:{{列表|過濾器}}

過濾器 描述
first 取第一個元素
last 取最後一個元素
length 獲取列表長度
sum 列表求和
sort 列表排序

語句塊操作:

{% filter upper %}
    #一大堆文字#
{% endfilter %}

鏈式調用:

{{ "hello world" | reverse | upper }}

2.自定義過濾器:
直接添加到過濾器列表:

def do_listreverse(li):
    # 通過原列表創建一個新列表
    temp_li = list(li)
    # 將新列表進行返轉
    temp_li.reverse()
    return temp_li

app.add_template_filter(do_listreverse,'lireverse')

使用裝飾器添加:

@app.template_filter('lireverse')
def do_listreverse(li):
  # 通過原列表創建一個新列表
  temp_li = list(li)
  # 將新列表進行返轉
  temp_li.reverse()
  return temp_li

代碼複用

1.宏(macro):
(1)定義格式:{% macro 宏名(參數) %} {%endmacro%}
(2)使用格式:
當前文件:使⽤當前⽂件宏: {{ 宏名(參數) }}
其他文件:{% import ‘宏⽂件名’ as 別名%} {{ 別名.宏名(參數) }}

2.繼承(extends):
(1)特點: 共性抽取, 代碼復⽤
(2)格式: {% extends ‘⽗⽂件名’%}
(3)注意點:
父類:父類與子類可能不同的地方用block代碼塊寫,方便子類重寫
子類:可根據需求重寫父類block代碼塊,可使用{{super()}}調用父類block內容

3.包含(include):
(1)特點:將⼀個⽂件的內容,完全拷⻉到另外⼀個⽂件中,不夠靈活
(2)格式: {% include ‘⽂件名’ ignore missing%},ignore missing可不寫,但是找不到目標文件會報錯

特有變量及函數

1.特點: 不需要重flask程序⾥⾯,傳遞到模板就可以直接使⽤的
2.特殊變量及函數:

特殊變量/函數 描述
config app的配置對象,和flask⾥⾯的app.config是⼀回事
request 請求對象
g 應⽤上下⽂對象
url_for() 通過函數名,解析到所對應的路徑
get_flashed_messages() 消耗, flash()⽅法⾥⾯存儲的信息

flash存儲數據的時候,⽤到了session所以需要設置SECRET_KEY

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章