jinja2模板常用方法


數學運算+,-,*,/,**,//,%等數學運算符都支持.

邏輯運算and,or,not也同樣支持

1.in判斷元素是否在集合中

2.|管道操作符,默認使用Apply調用一個方法

3.~字符串連接

4()調用可調用對象

5..和[]獲取屬性

6.三元操作:value1ifexpressionelsevalue2支持

7.內建filter:(對於內建filter的別名,可以在jinja2的filters.py文件中查找)

8.abs(number)返回一個值的絕對值

9.batch(value,lincount,fill_with=None):接受的value是一個序列對象,linecount表明個數,最后生成一個列表,列表個數為linecount,如果提供的value長度小於linecount,不足的使用fill_with填充

10.capitalize(string):接受一個字符串,將其轉換為首字母大寫,其他字母小寫的形式返回

11.center(value,width=80):接受一個字符串,將其至於80的長度中居中,不足的字符使用空格填充

12.default(value,default_value=u””,boolean=False):返回value指定的變量的值,如果value是Undefined那么返回default_value指定的值,boolean意義未知

13.dictsort(value,case_sensitive=False,by=‘key’):value為要遍歷的字典,case_sensitive指示是否立即加載,設置為False表示延時加載,by表示以什么排序,可以通過設置by=‘value’來以值排序.

14.escape(string):返回一個轉碼的安全HTML

15.filesizeformat(value):接受一個數值,返回人易讀的文件大小表示.

16.first(sequence):返回序列的第一個元素

17.float(value,default=0.0):將接受到的value轉換成float類型,如果轉換失敗返回指定的default值

18.forceescape(value):強制進行HTML轉碼,也就是說不檢查要轉碼的字符串是否是標記為安全的,這樣可能會發生二次轉碼

19.format(value,*attribute):類似於字符串格式化’%d%s’這樣的功能value是格式定義,attribute不定參數接受占位符代表的值.

20.groupby(value,attribute):按照指定的共有屬性將集合進行分組,返回元組組成的列表,元組中第一個元素是用來分組的屬性的值,第二個元素是分組得到的所有原集合元素的列表.

21.indent(string,width=4,indentfirst=False):將接受到的string,每行縮進width指定的字符數,indentfirst用來指定首行是否縮進.

22.int(value,default=0):將接受到的value轉換成int型,如果轉換失敗,返回default指定的值

23.join(value,d=u””):接受一個序列類型的對象,向序列中進行插空d指定的字符串返回一個字符串

24.last(seq):返回指定序列的最后一個元素

25.length(obj):返回序列或者字典的項數

26.list(value):將接受到的value轉換成一個list

27.lower(string):將接受到的字符串轉換成小寫形式.

28.pprint(value,verbose=False):漂亮的打印一個變量的值,多用於調試,verbose表示是否顯示冗長的信息

29.random(seq):接受一個序列對象,隨機返回其中的一個元素

30.replace(string,old,new,count=None):接受一個字符串,將其中的old表示的子串替換成new指定的子串,從左到右替換count次,如果count不指定,則替換一次

31.reverse(value):接受一個可迭代對象,返回逆序的迭代器

32.round(value,precision=0,method=‘common’):舍去運算,接受一個值,precision表示精度(小數點后保留幾位),method可以取值common|ceil|floor,分別表示四舍五入|進位|舍去

33.safe(value):標記傳入的value值是安全的,使用escape轉碼時不會發生二次轉碼

34.slice(value,slices,fill_width=None):切片,接受一個可迭代對象,返回slices指定的前n個元素,不足n個使用fill_width指定的對象進行填充

35.sort(value,reverse=False):接受一個序列對象,進行排序,reverse指定是否逆序

36.string(obj):接受一個對象,轉換成一個string字符串

37.striptags(values):接受一個字符串,剝離SGML/XML標簽,並且將多個空白字符轉換成單空格

38.sum(sequence,start=0):接受一個序列對象,返回序列對象的元素和start的總和,如果指定的序列對象是空的,就返回start指定的值

39.title(string):將接受到的字符串轉換成標題模式,即每個單詞的首字母大寫

40.trim(value):去掉字符串開始和末尾多余的空白字符

41.truncate(string,length=255,killwords=False,end=“…”):切斷接受到的字符串,截取前length個字符,如果字符串比length長,切斷后追加end指定的字符串,如果killwords=True可以返回,如果killwords=False不會有任何輸出,不明白.

42.upper(string)把接受到的字符串轉成大寫

43.urlize(value,trim_url_limit=None,nofollow=False):接受一個url,轉換成一個<a>標簽表示的link,這個link的href為傳入的url,innerText是url截取前trim_url_limit個字符,nofollow設置為true時,會為這個link加入一個屬性rel=’nofollow’

44.wordcount(string):計算string中的單詞數

45.wordwrap(string,width=79,break_long_words=True):返回經過包裝的width指定寬度的字符,也就是說每讀取width個字符就會換行.,break_long_words表明在獲取到width個字符之后,如果一個單詞還沒有結束,是否截斷單詞,False將不會截斷

46.xmlattr(d,autospace=True):通過接受一個字典,創建一個SGML/XML屬性列表,例如:

<ul{{{‘class’=‘my_list’,‘missing’:none,‘id’:‘list’}|xmlattr}}/>

可以得到輸出

<ulclass=’my_list’id=’list’/>

字典中指定的值為none的,將不會被解析成標簽屬性.

 

23內建測試:

23.1callable(object):測試一個對象是否是可調用對象

23.2defined(value):測試傳入的對象是否已經定義了

23.3divisibleby(value,num)測試傳入的數值是否可以被num整除

23.4escaped(value):檢查傳入的對象是否被轉碼了

23.5even(value):如果傳入的對象是even的返回True,不懂even是什么樣的對象

23.6iterable(value):檢查對象是否是可迭代的

23.7lower(value):檢查傳入的字符串是否都是小寫

23.8none(value):檢查對象是否是空對象None

23.9number(value):檢查對象是否是一個數字

23.10odd(value):檢查傳入的數字是否是奇數

23.11sameas(value,other):檢查傳入的對象和other指定的對象是否在內存中的同一塊地址(同一個對象)

23.12sequence(value):檢查對象是否是序列,序列同樣是可迭代對象

23.13string(value):檢查對象是否是string

23.14undefined(value):檢查一個對象是否未定義

23.15upper(value):檢查一個字符串是否全部大寫

24全局函數:

24.1range([start,]stop[,step]):

{%foriinrange(10)%}

{{i}}

{%endfor%}

24.2lipsum(n=5,html=True,min=20,max=100):不知道用途

24.3dict(**items)根據傳入的關鍵字參數構造一個字典對象.

for

循環打印一個序列,例如:

h1>Members</h1>

<ul>

{%foruserinusers%}

<li>{{user.username|e}}</li>

{%endfor%}

</ul>

在循環內部,你可以訪問一些特殊的變量

VariableDescription

loop.index當前迭代的索引,從1開始算

loop.index0當前迭代的索引,從0開始算

loop.revindex相對於序列末尾的索引,從1開始算

loop.revindex0相對於序列末尾的索引,從0開始算

loop.first相當於loop.index==1.

loop.last相當於loop.index==len(seq)-1

loop.length序列的長度.

loop.cycle是一個幫助性質的函數,可以接受兩個字符串參數,如果當前循環索引是偶數,則顯示第一個字符串,是奇數則顯示第二個字符串。它常被在表格中用來用不同的背景色區分相鄰的行。

 

設置變量值{%setvariable_name=value%}

宏

{%macrolast_tweets(count=20)%}

<divclass=twitter>

{%fortweetinmodels.twitter.get_last_tweets(count)%}

<p><ahref="{{tweet.url|e}}">{{tweet.username|e}}</a>:

{{tweet.parsed_text}}

{%endfor%}

</div>

{%endmacro%}





Whydoyouneedanextensionforthat?Afunctionisperfectlyfine:

fromjinja2importcontextfunction

@contextfunction

defwidget(context,template_name,**extra_context):

t=jinja_env.get_template('widgets/'+template_name)

ctx=dict(context.items())

ctx.update(extra_context)

returnt.render(ctx)

jinja_env.globals['widget']=widget



Andtheninthetemplate::

{{widget('last_tweets.html')}}



1{%setnavigation=[('index.html','Index'),('about.html','About')]%}

2{%setkey,value=call_something()%}



globalfunctions和filters類似,注冊方法都是將其保存於Environment中,前者保存在Environment.globals字典中,后者保存在Environment.filters字典中即可。

env.filters['filter_name']=filter_func
env.filters['globalfunction_name']=global_func
macro:
{%macroinput(name,value='',type='text',size=20)%}
<inputname="{{name}}"value="{{
value|e}}"size="{{size}}"type="{{type}}">
{%endmacro%}
{{input('username')}}
{%macrorender_dialog(title,class='dialog')-%}
<divclass="{{class}}">
<h2>{{title}}</h2>
<divclass="contents">
{{caller()}}
</div>
</div>
{%-endmacro%}
{%callrender_dialog('HelloWorld')%}
Thisisasimpledialogrenderedbyusingamacroand
acallblock.
{%endcall%}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM