http://docs.jinkan.org/docs/jinja2/
摘自
http://www.pythontip.com/blog/post/5455/
數學運算 +, -, *, /, **, //, %等數學運算符都支持.
邏輯運算 and, or, not也同樣支持
1. in 判斷元素是否在集合中
2. | 管道操作符, 默認使用Apply調用一個方法
3. ~ 字符串連接
4 () 調用可調用對象
5. . 和 [ ]獲取屬性
6. 三元操作: value1 if expression else value2支持
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 }} />
可以得到輸出
<ul class=’my_list’ id=’list’ />
字典中指定的值為none的, 將不會被解析成標簽屬性.
23 內建測試:
23.1 callable(object): 測試一個對象是否是可調用對象
23.2 defined(value): 測試傳入的對象是否已經定義了
23.3 divisibleby(value, num)測試傳入的數值是否可以被num整除
23.4 escaped(value): 檢查傳入的對象是否被轉碼了
23.5 even(value): 如果傳入的對象是even的返回True, 不懂even是什么樣的對象
23.6 iterable(value): 檢查對象是否是可迭代的
23.7 lower(value): 檢查傳入的字符串是否都是小寫
23.8 none(value): 檢查對象是否是空對象None
23.9 number(value): 檢查對象是否是一個數字
23.10 odd(value): 檢查傳入的數字是否是奇數
23.11 sameas(value, other): 檢查傳入的對象和other指定的對象是否在內存中的同一塊地址(同一個對象)
23.12 sequence(value): 檢查對象是否是序列, 序列同樣是可迭代對象
23.13 string(value): 檢查對象是否是string
23.14 undefined(value): 檢查一個對象是否未定義
23.15 upper(value): 檢查一個字符串是否全部大寫
24 全局函數:
24.1 range([start, ]stop[, step]):
{% for i in range(10) %}
{{ i }}
{% endfor %}
24.2 lipsum(n = 5, html = True, min = 20, max = 100): 不知道用途
24.3 dict(**items) 根據傳入的關鍵字參數構造一個字典對象.
for
循環打印一個序列,例如:
h1>Members</h1>
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
在循環內部,你可以訪問一些特殊的變量
Variable Description
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 是 一個幫助性質的函數,可以接受兩個字符串參數,如果當前循環索引是偶數,則顯示第一個字符串,是奇數則顯示第二個字符串。它常被在表格中用來用不同的背景 色區分相鄰的行。
設置變量值 {% set variable_name = value %}
宏
{% macro last_tweets(count=20) %}
<div class=twitter>
{% for tweet in models.twitter.get_last_tweets(count) %}
<p><a href="{{ tweet.url|e }}">{{ tweet.username|e }}</a>:
{{ tweet.parsed_text }}
{% endfor %}
</div>
{% endmacro %}
Why do you need an extension for that? A function is perfectly fine:
from jinja2 import contextfunction
@contextfunction
def widget(context, template_name, **extra_context):
t = jinja_env.get_template('widgets/' + template_name)
ctx = dict(context.items())
ctx.update(extra_context)
return t.render(ctx)
jinja_env.globals['widget'] = widget
And then in the template::
{{ widget('last_tweets.html') }}
1{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}
2{% set key, value = call_something() %}
global functions和filters類似,注冊方法都是將其保存於Environment中,前者保存在Environment.globals字典中,后者保存在Environment.filters字典中即可。
01 env.filters['filter_name'] = filter_func
02 env.filters['globalfunction_name'] = global_func
03 macro:
04 {% macro input(name, value='', type='text', size=20) %}
05<input name="{{ name }}" value="{{
06 value|e }}" size="{{ size }}" type="{{ type }}">
07 {% endmacro %}
08
09{{ input('username') }}
10
11 {% macro render_dialog(title, class='dialog') -%}
12<div class="{{ class }}">
13<h2>{{ title }}</h2>
14<div class="contents">
15 {{ caller() }}
16 </div>
17</div>
18
19 {%- endmacro %}
20
21 {% call render_dialog('Hello World') %}
22 This is a simple dialog rendered by using a macro and
23 a call block.
24 {% endcall %}
