Flask 模板渲染

2021-08-10 11:40 更新

用 Python 生成 HTML 十分無(wú)趣,而且相當(dāng)繁瑣,因?yàn)槟惚仨毷謩?dòng)對(duì) HTML 做轉(zhuǎn) 義來(lái)保證應(yīng)用的安全。為此,F(xiàn)lask 配備了 Jinja2 模板引擎。

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

from flask import render_template

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

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

情況 1: 模塊:

/application.py
/templates
    /hello.html

情況 2: 包:

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

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

這里有一個(gè)模板實(shí)例:

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

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

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

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

這里是一個(gè) Markup 類(lèi)如何使用的簡(jiǎn)單介紹:

>>> 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 版更改: 自動(dòng)轉(zhuǎn)義不再在所有模板中啟用。下列擴(kuò)展名的模板會(huì)觸發(fā)自動(dòng)轉(zhuǎn)義: .html.htm 、.xml 、 .xhtml 。從字符串加載 的模板會(huì)禁用自動(dòng)轉(zhuǎn)義。

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)