Flask 模板渲染

2021-08-10 11:40 更新

用 Python 生成 HTML 十分無趣,而且相當(dāng)繁瑣,因為你必須手動對 HTML 做轉(zhuǎn) 義來保證應(yīng)用的安全。為此,F(xiàn)lask 配備了 Jinja2 模板引擎。

你可以使用 render_template() 方法來渲染模板。你需要做的一 切就是將模板名和你想作為關(guān)鍵字的參數(shù)傳入模板的變量。這里有一個展示如何 渲染模板的簡例:

from flask import render_template

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)

Flask 會在 templates 文件夾里尋找模板。所以,如果你的應(yīng)用是個模塊,這 個文件夾應(yīng)該與模塊同級;如果它是一個包,那么這個文件夾作為包的子目錄:

情況 1: 模塊:

/application.py
/templates
    /hello.html

情況 2: 包:

/application
    /__init__.py
    /templates
        /hello.html

關(guān)于模板,你可以發(fā)揮 Jinja2 模板的全部實例。更多信息請見 Jinja2 模板文檔

這里有一個模板實例:

<!doctype html>
<title>Hello from Flask</title>
{% if name %}
  <h1>Hello {{ name }}!</h1>
{% else %}
  <h1>Hello World!</h1>
{% endif %}

在模板里,你也可以訪問 request 、 session g [1] 對象, 以及 get_flashed_messages() 函數(shù)。

模板繼承讓模板用起來相當(dāng)順手。如欲了解繼承的工作機理,請?zhí)D(zhuǎn)到 模板繼承 模式的文檔。最起碼,模板繼承能使特定元素 (比如頁眉、導(dǎo)航欄和頁腳)可以出現(xiàn)在所有的頁面。

自動轉(zhuǎn)義功能默認(rèn)是開啟的,所以如果 name 包含 HTML ,它將會被自動轉(zhuǎn) 義。如果你能信任一個變量,并且你知道它是安全的(例如一個模塊把 Wiki 標(biāo) 記轉(zhuǎn)換為 HTML),你可以用 Markup 類或 |safe 過濾 器在模板中把它標(biāo)記為安全的。在 Jinja 2 文檔中,你會看到更多的例子。

這里是一個 Markup 類如何使用的簡單介紹:

>>> from flask import Markup
>>> Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>'
Markup(u'<strong>Hello &lt;blink&gt;hacker&lt;/blink&gt;!</strong>')
>>> Markup.escape('<blink>hacker</blink>')
Markup(u'&lt;blink&gt;hacker&lt;/blink&gt;')
>>> Markup('<em>Marked up</em> &raquo; HTML').striptags()
u'Marked up \xbb HTML'

在 0.5 版更改: 自動轉(zhuǎn)義不再在所有模板中啟用。下列擴展名的模板會觸發(fā)自動轉(zhuǎn)義: .html 、 .htm 、.xml 、 .xhtml 。從字符串加載 的模板會禁用自動轉(zhuǎn)義。

不確定 g 對象是什么?它允許你按需存儲信息, 查看( g )對象的文檔和 在 Flask 中使用 SQLite 3 的文 檔以獲取更多信息。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號