前言
在之前先後端不分離的時代,後臺程序員每每又當爹又當媽,須要將前端程序員寫的h5頁面填充模板語言。而jijia2是一門十分強大的python的模板語言,是flask框架的核心模塊之一。先簡單介紹一下jijia2模板的用法。html
系列文章
變量
模板能夠說是直接展現給客戶端的,那麼在模板中有視圖函數傳遞給模板的普通變量和能夠直接使用的全局變量。前端
普通變量
- 變量的語法結構
<p>{{ bianliang }}</p> # 模板中的變量 {% if bianliang > 3 %} # 用來執行賦值或條件或判斷語句 {# said something #} # 註釋
- 變量對象的屬性查找
bar.per # 先查找bar對象是否有per屬性,再查找是否有per對象(如字典中的鍵值對); bar['per'] # 先查找是否有per對象(如字典中的鍵值對),再查找bar對象是否有per屬性; # 若是沒有找到,則返回未定義對象,默認用空字符串替代;
- 變量的來源
# render_template render_template函數會模板和傳遞的變量值進行組裝 # 自定義的兩個變量名context和message能夠在模板中使用 render_template('sleeps/sleep.html',context=users,message=data) # render_template_string方法也能夠傳遞變量名 render_template_string('<p>OK</p><p>OK</p>', name='aaaa')
全局變量
即不須要顯性的傳遞,能夠直接使用的變量python
- request
# 經過request能夠直接獲取相關的屬性 {{request.args}}
-
session程序員
-
gsql
-
配置對象configdjango
-
url_for()flask
過濾器
過濾器的使用方式爲:變量名 | 過濾器。如:{{ 'aaa' | safe | lower}}後端
全局經常使用過濾器
default:若是該變量未定義或找不到,使用默認的值;
length:獲取字符串,列表,元組,字典的長度
random(seq):從序列中返回一個隨機項;
replace(value,old,new,count=None):將old替換爲new的字符串,count設置替換的次數;
對數字的操做
abs:返回一個數字的絕對值;
round:四捨五入取整;
round(2,'floor'):截取小數點後兩位;'floor'向下截取,'ceil'向上截取,'common'四捨五入,默認的; int(value):將值轉換爲int類型。 float(value):將值轉換爲float類型。 groupby(value, attribute):分組; reverse:將迭代器反轉; select,selectattr:對序列中進行過濾,返回判斷爲True的元素組成的列表; reject,rejectattr:對序列中進行過濾,返回判斷爲False的元素組成的列表;
對變量的字符串操做
safe:禁用轉義;
string(value):將變量轉換成字符串。
list(value):將值轉換成列表
urlize:將文本的url轉換成可點擊的連接;urlize(5):將這個連接縮短爲顯示指定的長度5;
wordcount(s):計算一個長字符串中單詞的個數
capitalize:把變量值的首字母轉成大寫,其他字母轉小寫;
truncate(value,length=255,killwords=False):截取length長度的字符串。 lower:把值轉成小寫; upper:把值轉成大寫; title:把值中的每一個單詞的首字母都轉成大寫;適用於一句話; trim:把值的首尾空格去掉; format:格式化輸出;如: <p>{{ '%s is %d' | format('name',17) }}</p> striptags:渲染以前把值中全部的HTML標籤都刪掉; escape:轉義字符,會將<、>等符號轉義成HTML中的符號。 wordwrap(s, width=79, break_long_words=True, wrapstring=None):將字符串分紅指定長度一份,如{{ 'http://www.baidu.com' | wordwrap(9)}}
對列表的操做
first:取列表的第一個元素,如:{{ [1,2,3,4,5,6] | first }} last:取最後一個元素 sum:列表求和,若是不能計算會報錯; sort:列表排序,默認按升序排列; batch:對列表分組,造成二維列表,如:{{ [1,2,3,4,5] | batch(2,'ff') }},2個元素一組,不足的使用'ff‘替代; join:拼接列表中的元素;如:{{ [1,2,3,4,5] | join('&&') }}; upper,lower:將列表中全部的字符串改變大小寫; slice:切片,返回二維列表,slice(2)設置步長
對字典的操做
dictsort(value, case_sensitive=False, by='key'):按鍵的首字母順序排序,並生成列表; 如:{{ {'name':'xx','age':'23'} | dictsort }},結果:[('name',"xx"),('age','23')] sort:排序; {{ {'name':'xx','age':'23'} | sort(attribute='age', reverse=true) }} # 按指定的字段,降序排列,默認升序; attr:獲取對象的屬性;如:{{ {'name':'xx','age':'23'} | attr('age') }} map(value,attribute):提取值中的某一項組成一個列表;如:{{context| map(attribute='age')}},age組成一個字典;
調試
pprint(value, verbose=False):輸出一個變量;
不經常使用的過濾器
filesizeformat(value, binary=False):將值格式化成文件的大小,如4.1 MB, 102 Bytes等;若是binary=True則爲二進制;
自定義過濾器
注意:自定義的過濾器名稱若是和內置的過濾器重名,會覆蓋內置的過濾器。api
方法一:ruby
過濾器實際上是一個函數,能夠自定義一個函數,而後經過flask的add_template_filter將咱們的函數加入到過濾器表單中;
import app def funcx(ls): return ls+3 app.add_template_filter(funcx,'add_3') # 第一個參數爲函數的名字,第二個參數爲過濾器的名字;
方法二:
使用template_filter函數和裝飾器的方式實現;
import app
@app.template_filter('add_3') def funcx(ls): return ls+3
全局函數
全局函數是任意函數,能夠在任一場景使用,沒有輸入和輸出值的限制。其變量至關於python中的全局變量;
使用方式:
{% set sep = joiner("|") %} # 定義一個全局變量
經常使用函數
range([start], stop[, step]):和python中的range的用法徹底同樣; dict():傳入鍵值對,能夠生成字典; joiner():能夠初始化爲一個分隔符,而後第一次調用時返回空字符串,之後再調用則返回分隔符。對分隔循環中的內容頗有幫助 cycler():這是一個類,週期計容許你在若干個值中循環,傳入多個值,在多個值中循環; # cycler有三個函數 reset():重置週期計到第一個項。 next():返回當前項並跳轉到下一個。 current:返回當前項。 lipsum(n=5, html=True, min=20, max=100):在模板中生成 lorem ipsum 亂數假文。默認會生成 5 段 HTML ,每段在 20 到 100 詞之間。用來測試;
自定義全局函數
- 使用add_template_global函數;
# 註冊全局函數 app.add_template_global(funcx,'add_3') # 使用裝飾器 @app.template_global('add_3') def funcx(ls): return ls+3
參考:
-
http://docs.jinkan.org/docs/jinja2/templates.html#builtin-filters
-
http://jinja.pocoo.org/docs/2.10/templates/