Flask框架——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