觸屏版手機(jī)網(wǎng)站鄭州網(wǎng)站運(yùn)營實(shí)力樂云seo
簡介
Jinja2是Flask框架默認(rèn)支持的模板引擎,是python的web項(xiàng)目中被廣泛應(yīng)用的一種模板引擎,jinja2的作者與Flask是同一個(gè)人。
jinja2具有以下特點(diǎn):
-
非常靈活,提供了控制結(jié)構(gòu)、表達(dá)式與繼承等
-
性能好
-
可讀性強(qiáng)
渲染一個(gè)模板,通過render_template方法即可
語法
引入渲染函數(shù)
使用之前需要先通過import?導(dǎo)入
from?flask?import?render_template
注:要將模板文件放置在項(xiàng)目根目錄的 templates文件夾中
在Jinja2中,存在三種語法
-
變量取值?{{?}}
-
控制結(jié)構(gòu)(邏輯代碼) {% %}
-
注釋 {# #}
示例1:變量取值?{{ }}
@app.route("/tmp")
def template_test():name = "我是字符串"num =1mylist = [1,2,3,4]mydict={"name":"張三","age":33}mytuple = (1,2,3,4)return render_template("template.html",name=name,num=num,mylist=mylist,mydict=mydict,mytuple=mytuple)
template.html 模板文件?
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body><p>字符串:{{ name }}</p><p>數(shù)字:{{ num }}</p><p>列表:{{ mylist }}</p><p>列表中的第二個(gè)元素:{{ mylist[1] }}</p><p>字典:{{ mydict }}</p><p>字典的name:{{ mydict['name'] }}</p><p>元組:{{ mytuple }}</p><p>元組的第2個(gè)元素:{{ mytuple[1] }}</p>
</body>
</html>
調(diào)用結(jié)果
示例2:控制結(jié)構(gòu)?{%?%}
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body><p>字符串:{{ name }}</p><p>數(shù)字:{{ num }}</p><p>列表:{{ mylist }}</p><p>列表中的第二個(gè)元素:{{ mylist[1] }}</p><p>字典:{{ mydict }}</p><p>字典的name:{{ mydict['name'] }}</p><p>元組:{{ mytuple }}</p><p>元組的第2個(gè)元素:{{ mytuple[1] }}</p>{% if name=='張三' %}條件滿足,我是張三{% else %}條件不滿足{% endif %}循環(huán)列表數(shù)據(jù):{% for i in mylist %}{{ i }}{% endfor %}
</body>
</html>
調(diào)用結(jié)果
示例3:注釋 {#?#}
{# 循環(huán)列表數(shù)據(jù):#}
{% for i in mylist %}{{ i }}
{% endfor %}
過濾器
有些時(shí)候需要對(duì)要在模板中的變量值做一些特殊處理,比如首字母大寫,去掉前后空格、字符串拼接等等,這時(shí)就可以使用過濾器。
過濾器的使用
通過??|??來使用過濾器,與Linux中的管道類似
例如,將字符串的首字母大寫
<p>{{?name?|?capitalize?}}</p>
常用的過濾器
過濾器 | 說明 |
---|---|
safe | 渲染時(shí)值不轉(zhuǎn)義 |
capitalize | 首字母大寫,其他字母小寫 |
lower | 所有字母小寫 |
upper | 所有字母大寫 |
title | 值中每個(gè)單詞首字母大寫 |
trim | 去除首尾空格 |
striptags | 渲染時(shí)刪除掉值中所有HTML標(biāo)簽 |
? join | 拼接字符串 |
? replace | 替換字符串中的值 |
? round | 對(duì)數(shù)據(jù)進(jìn)行四舍五入 |
示例代碼
@app.route("/tmp2")
def template_test2():name = "harRY"return?render_template("template2.html",name=name)
template2.html
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>{# 首字母大寫 #}<p>{{ name | capitalize }}</p>{# 單詞全小寫 #}<p>{{ "Hello World!" | lower }}</p>{# 去除首尾空格 #}<p>{{ " Hello World! " | trim }}</p>{# 四舍五入取整 #}<p>{{ 1.26 | round }}</p>{# 四舍五入保留2位小數(shù)取整 #}<p>{{ 1.2666 | round(2) }}</p>
</body>
</html>
調(diào)用
自定義過濾器
當(dāng)遇到現(xiàn)有的過濾無法滿足我們的需求時(shí),這時(shí)就需要我們自定義一個(gè)過濾器了
自定義過濾器有兩種方式
方式1:@app.template_filter()
#?第一種方式,用作計(jì)算字符串長度
@app.template_filter()
def str_len(args):return len(args)
方式2:?先定義方法,后采用?app.jinja_env.filters
#?第二種方式,?去除字符串中的空格
def replace_space(args):return args.replace(" ", "")app.jinja_env.filters['replace_space'] = replace_space
使用以上自定義的過濾器
@app.route("/tmp3")
def template_test3():name = "harRY"aaa="dfs jklf jffff "return render_template("template3.html", name=name,aaa=aaa)
template3.html
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body><p>{{ name | str_len }}</p><p>{{ aaa | replace_space }}</p>
</body>
</html>
輸出
程序猿與投資生活實(shí)錄已改名為? 程序猿知秋,WX?公眾號(hào)同款,歡迎關(guān)注!!?