[Follow Study] Day4:flask開發(fā)中的jinja2模板引擎學(xué)習(xí)筆記(一)

jinja2是flask開發(fā)過程中對應(yīng)的模板引擎,默認(rèn)的情況下是不用單獨(dú)安裝的,在我們安裝flask的時(shí)候就已經(jīng)安裝好了绎晃,直接用就可以泊柬。

在開始學(xué)習(xí)flask模板相關(guān)的語法的時(shí)候椎镣,我們需要先簡單學(xué)習(xí)一下flask-script這個(gè)開發(fā)過程中比較常用的flask擴(kuò)展。

一兽赁、flask-script簡單學(xué)習(xí)

flask-script這個(gè)擴(kuò)展主要是在我們開發(fā)過程中使用状答,最直接的用途是給我們的flask項(xiàng)目添加一個(gè)命令行的擴(kuò)展,便于開發(fā)測試刀崖,這個(gè)類似django的命令行惊科。

1、flask-script安裝

pip install flask-script

安裝成功之后亮钦,在使用的時(shí)候馆截,和其他flask擴(kuò)展一樣,需要我們的導(dǎo)入,絕大多數(shù)的教程都介紹導(dǎo)入兩個(gè)方法ManagerServer蜡娶,但是這里我們只導(dǎo)入Manager,Server為了后面學(xué)習(xí)jinja2混卵,使用Livereload這個(gè)python擴(kuò)展,方便調(diào)試模板窖张。

2幕随、flask-script使用

from flask-script import Manager
#省略部分代碼
manager = Manager(app)

if __name__ == '__main__':
manager.run()

上述代碼中的第二行是實(shí)例化Manager,絕大多數(shù)的flask擴(kuò)展都需要用到實(shí)例化宿接,后面我們學(xué)習(xí)其他的flask擴(kuò)展會(huì)繼續(xù)介紹這方面的內(nèi)容赘淮。

二、livereload簡單學(xué)習(xí)

livereload也是開發(fā)過程中能夠提升效率的一個(gè)python包睦霎,注意這個(gè)不是flask的擴(kuò)展梢卸,livereload的作用是,當(dāng)我們保存完所修改的文件之后碎赢,服務(wù)器能夠自動(dòng)執(zhí)行低剔。

開始的時(shí)候小蝦也覺得貌似沒什么用,因?yàn)槲覀冇?code>debug=Ture肮塞,但是事實(shí)上發(fā)現(xiàn)還是很有用的襟齿,debug只能讓我們的后端文件重新執(zhí)行,前端文件還需要我們手動(dòng)來刷新枕赵,但是使用了livereload猜欺,只要監(jiān)控了的文件,都能幫我們重新執(zhí)行拷窜,很方便的开皿。

1、livereload安裝

安裝的過程中發(fā)現(xiàn)篮昧,通過venv環(huán)境下使用pip install安裝赋荆,即使提示安裝成功,但是在import引入的時(shí)候依然無法引入懊昨,這個(gè)問題還沒找到原因窄潭,后來通過pycharm的設(shè)置安裝,安裝成功酵颁,然后可以正常使用嫉你,搜索了一下這方面的問題,發(fā)現(xiàn)知乎上也有人問躏惋。幽污。。

2簿姨、livereload使用

在使用livereload的時(shí)候也需要導(dǎo)入距误,然后配合manager.command修飾器使用,具體代碼如下:

@manager.command
def dev():
from livereload import Server
live_server = Server(app.wsgi_app)
live_server.watch('**/*.*')
live_server.serve(open_url=True)

運(yùn)行的話也有點(diǎn)特殊,這個(gè)時(shí)候需要我們加上command命令運(yùn)行深寥,具體的代碼如下:

python sample.py dev

然后不出意外攘乒,我們就看到如下圖所示的成功運(yùn)行的圖,另外瀏覽器會(huì)自動(dòng)打開并運(yùn)行我們的項(xiàng)目惋鹅。

Paste_Image.png

三、flask jinja2簡單語法

在后端殉簸,我們需要使用render_template('模板文件','模板變量=變量')來和指定的模板進(jìn)行溝通闰集。比如下面的index視圖。
sample.py文件部分代碼如下:

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
return render_template('index.html',title="<h1>hello world</h1>")

if __name__ == '__main__':
app.run()

index.html文件代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
{{ title }}
</body>
</html>

這個(gè)時(shí)候訪問我們的127.0.0.1:5000就應(yīng)該看到下面的內(nèi)容

Paste_Image.png

如果信心的話般卑,發(fā)現(xiàn)h1標(biāo)簽并沒有實(shí)現(xiàn)我們想象中的效果武鲁,被過濾掉了,但是事實(shí)上我們希望的是能夠正確被解析蝠检,這里就要說到j(luò)inja2的過濾器了沐鼠。

1、jinja2過濾器

jinja2過濾器主要作用是將從后端文件傳過來的參數(shù)進(jìn)行一些裝飾叹谁,然后再在頁面進(jìn)行渲染饲梭,比如上面的例子,如果默認(rèn)不做上面的話焰檩,h1為了安全起見是被過濾掉的憔涉,但是如果我們確認(rèn)接受過來的參數(shù)title是安全的,那就可以通過safe進(jìn)行過濾析苫,具體如下:

{{ title|safe }}

這個(gè)時(shí)候我們訪問頁面兜叨,就會(huì)看到下面的內(nèi)容:

Paste_Image.png

2、自定義jinja2過濾器

jinja2給我們提供了大量的過濾器衩侥,具體的話可以通過訪問jinja2官方頁面進(jìn)行查詢国旷,但是有時(shí)候我們需要自己的過濾器,這個(gè)時(shí)候可以通過自定義jinja2過濾器來實(shí)現(xiàn)茫死。

jinja2自定義過濾器主要是通過注冊自定義函數(shù)到j(luò)inja2模板上跪但,使用的到的命令是@app.template_filter('過濾器名字'),這里以一個(gè)能夠支持markdown的過濾器為例說明璧榄。

@app.template_filter('md')
def markok(txt):
from markdown import markdown
return markdown(txt)

不加md過濾器特漩,默認(rèn)輸出的文件是下面的:

Paste_Image.png

我們加上md過濾器,輸出的結(jié)果如下圖:

Paste_Image.png

說明我們的自定義過濾器執(zhí)行成功了骨杂。jinja2模板的過濾器可以同時(shí)使用多個(gè)涂身,都是通過|鏈接,這個(gè)類似shell中的管道搓蚪。

四蛤售、學(xué)習(xí)心得

flask學(xué)習(xí)過程中,知識真的很多,flask有N多的擴(kuò)展悴能,每一個(gè)擴(kuò)展又有N多的用法揣钦,都一次性學(xué)習(xí)的話,顯然對于新手的我來說是一個(gè)比較痛苦的過程漠酿,所以學(xué)習(xí)的過程中遵循一個(gè)“用什么學(xué)什么”的原則冯凹,先把最常用的功能了解一下,其他的知識炒嘲,在開發(fā)過程中用什么學(xué)什么宇姚。這樣效率會(huì)更高點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夫凸,一起剝皮案震驚了整個(gè)濱河市浑劳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夭拌,老刑警劉巖魔熏,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸽扁,居然都是意外死亡蒜绽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門献烦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滓窍,“玉大人,你說我怎么就攤上這事巩那±艉唬” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵即横,是天一觀的道長噪生。 經(jīng)常有香客問我,道長东囚,這世上最難降的妖魔是什么跺嗽? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮页藻,結(jié)果婚禮上桨嫁,老公的妹妹穿的比我還像新娘。我一直安慰自己份帐,他們只是感情好璃吧,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著废境,像睡著了一般畜挨。 火紅的嫁衣襯著肌膚如雪筒繁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天巴元,我揣著相機(jī)與錄音毡咏,去河邊找鬼。 笑死逮刨,一個(gè)胖子當(dāng)著我的面吹牛呕缭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播修己,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼臊旭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了箩退?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤佳谦,失蹤者是張志新(化名)和其女友劉穎戴涝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钻蔑,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啥刻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咪笑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片可帽。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窗怒,靈堂內(nèi)的尸體忽然破棺而出映跟,到底是詐尸還是另有隱情,我是刑警寧澤扬虚,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布努隙,位于F島的核電站,受9級特大地震影響辜昵,放射性物質(zhì)發(fā)生泄漏荸镊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一堪置、第九天 我趴在偏房一處隱蔽的房頂上張望躬存。 院中可真熱鬧,春花似錦舀锨、人聲如沸岭洲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钦椭。三九已至拧额,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間彪腔,已是汗流浹背侥锦。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留德挣,地道東北人恭垦。 一個(gè)月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像格嗅,于是被迫代替她去往敵國和親番挺。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容