Blog 項目源碼:https://github.com/JmilkFan/JmilkFan-s-Blogpython
用 Flask 來寫個輕博客 (1) — 建立項目
用 Flask 來寫個輕博客 (2) — Hello World!
用 Flask 來寫個輕博客 (3) — (M)VC_鏈接 MySQL 和 SQLAlchemy
用 Flask 來寫個輕博客 (4) — (M)VC_建立數據模型和表
用 Flask 來寫個輕博客 (5) — (M)VC_SQLAlchemy 的 CRUD 詳解
用 Flask 來寫個輕博客 (6) — (M)VC_models 的關係(one to many)
用 Flask 來寫個輕博客 (7) — (M)VC_models 的關係(many to many)
用 Flask 來寫個輕博客 (8) — (M)VC_Alembic 管理數據庫結構的升級和降級
用 Flask 來寫個輕博客 (9) — M(V)C_Jinja 語法基礎快速概覽 git
{{ post.date | default("2016-11-22") }}
{{ '' | default('String', True)}}
將傳入變量代碼塊中的值轉換爲浮點數,相似於 Python 的 float()github
{{ 75 | float }}
相似於 Python 的 int()web
{{ 75.5 | int }}
相似於 Python 中的 len()數據庫
The Count: {{ post.tags | lenght }}
將傳入變量代碼塊的 String 的首字母轉換成大寫,成爲一個合格的 Title。express
{{ "post title" | title }}
相似於 Python 的 round() 定義浮點數的精度。django
{{ 3.14159 | round(1) }}
{{ 4.7 | rount(1, "common")}}
將傳入變量代碼塊的列表變量中的元素做爲字符串鏈接起來,相似於 Python 的 join()json
{{ ['JmilkFan', 'fanguiju' ] | join(',')}}
過濾器 tojoin 其實是調用了 Python 的 json.dumps 函數來序列化對象,同樣的須要確保傳入變量代碼塊的是一個能夠被序列化的對象 Dict。flask
{{ {"key": "value" | tojson }}}
若是咱們採用將 SQLAlchemy models 的查詢對象直接傳入模板文件中進行渲染的方式來生成整個 HTML 頁面時,咱們就會經常使用到 tojson 過濾器,並且咱們還須要將序列化後的結果進行 safe 處理,才能保證其安全性。瀏覽器
{{ posts | tojson | safe }}
用於截取指定長度的 String 對象,並在截取後的子字符串後添加省略號。
{{ "a long stringggggggggggggggggg " | truncate(5) }}
若是傳入變量代碼塊的是 HTML 字符串,則將該字符串中的 &、<、>、’、」 做爲 HTML 的轉義序列打印。
{{ "<h1>Title<\h1>" | escape }}
safe 過濾器含有 escape 的功能,將傳入到變量代碼塊中的 HTML 字符串中的特殊符號進行 HTML 轉義,這是必要的安全手段。
假如咱們須要直接將 HTML 做爲變量傳入到變量代碼塊中,並且這個傳入的接口是公開的話,咱們就須要防止用戶提交惡意的 HTML 代碼。若是 Jinja 沒有 HTML 轉義功能的話,那麼咱們訪問這個變量代碼塊的時候就會運行這些被提交的惡意 HTML 代碼了。EG. 一個用戶在回覆框輸入了含有 Script 標籤的 HTML 代碼,那麼全部打開該頁面的瀏覽器都會執行這些 Script。
但有一個問題就是:在有些狀況下咱們不該該對 HTML 進行轉義且須要保證安全性的,對於這個問題,escape 過濾器是沒法解決的。因此 Jinja 提供了 safe 過濾器。
{{ "<h1>Post Title"</h1> | safe }}
在 Jinja 中自定義一個過濾器,有如編寫一個 Python 函數。
def count_substring_from_python(string, sub):
return string.count(sub)
app.jinja_env.filters['count_substring'] = count_substring_from_python
{{ variable | filter_name("String") }}
將過濾器函數 count_substring_from_python
映射成爲過濾器 count_substring
這些 Flask 特殊的變量和方法,都是能夠在模板文件中直接訪問的。
config 對象就是 Flask 的 config 對象,也就是 app.config 對象,其包含了 class DevConfig 的屬性。
{{ config.SQLALCHEMY_DATABASE_URI }}
就是 Flask 中表示當前請求的 request 對象。
{{ request.url }}
就是 Flask 的 session 對象。
{{ session.new }}
url_for()
會返回傳入的路由函數對應的 URL,所謂的路由函數就是被 app.route()
路由裝飾器裝飾的函數。EG. main.py 中的 home()。
{{ url_for('home') }}
/post/1024
,則能夠將這些參數做爲命名參數傳入:{{ url_for('post', post_id=1024) }}
返回以前在 Flask 中經過 flash()
傳入的信息列表,相似實現一個隊列。EG. 把 Python String 對象表示的消息加入到一個消息隊列中,而後經過調用 get_flashed_messages()
方法來逐一取出並消費掉。
{% for message in get_flashed_messages() %} {{ message }} {% endfor %}
NOTE: 前提是該消息隊列是由 flash()
來生成的。