Flask邊學邊做——2忱反、添加jinja模板

之前我們建立已經(jīng)建立了最小環(huán)境的web網(wǎng)站,而且瀏覽器頁面返回Hello Guest的文本祝拯。雖然在這個頁面我們可以加上html標簽甚带,如<h3>Hello Gutst</h3>豐富頁面她肯。但如果把大量的html語言寫到同一個文件里,勢必讓文檔結構混亂不堪鹰贵。所以我們就可以用到Flask內置的jinja模板晴氨。

1、渲染模板文件

Flask通過渲染模板碉输,把數(shù)據(jù)輸入模板變量中籽前。我們?yōu)閕ndex.py增加以下內容,來渲染模板文件敷钾。

from flask import Flask,render_template       #從flask模塊中導入Flask對象,導入render_template函數(shù)
app=Flask(__name__)             #把Flask對象付給app變量

@app.route('/')                  #添加路由/
def index():
    user='Michael Hu'           #設定user變量
    return render_template('index.html',user=user)    #使用render_template渲染index.html模板枝哄,傳遞user變量
if __name__=='__main__':
    app.run(debug=True)      #啟動app調試模式
  1. 導入render_template函數(shù),用于渲染模板文件阻荒。
  2. 給定一個傳入模板的user變量
  3. 用render_template函數(shù)指定渲染模板文件膘格,傳遞指定變量

2、定義模板文件

模板文件其實就是一個文本文件财松,通常后綴名定義成html文件瘪贱,模板文件里的變量可以接收應用傳遞來的值,并呈現(xiàn)出來辆毡。

在當前目錄下的新建templates目錄菜秦,并在該文件下新建index.html,代碼內容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <title>Default</title>
</head>
<body>
    <h3>{{user}}</h3>
</body>
</html>

如直接用瀏覽器打開這個文件舶掖,頁面僅顯示{{user}}球昨,這個就是變量,接收來自應用的數(shù)據(jù)眨攘。

瀏覽器呈現(xiàn)效果如下:


瀏覽器返回傳遞數(shù)據(jù)

2.1 模板中的判斷

模板中可以定義條件語句,修改index.html模板文件內容如下:

<h3>{{user}}</h3>
{%else%}
<h3>Hello Guest</h3>
{%endif%}
格式:{%if%} {%elif%} {%else%} {%endif%}

當user變量為空時候主慰,模板文件顯示Hello Guest

2.2 模板中的循環(huán)

2.2.1模板可以循環(huán)顯示應用傳遞的列表變量
  • index.py里增加列表變量數(shù)據(jù)
    ages=[23,45,33,54,65,32,12,56,76,76,76]

  • index.html模板文件增加循環(huán)顯示

{%for age in ages|sort()%}
<li>{{age}}</li>
{%endfor%}
{{ages}}

格式 {%for * in *%} {{*}} {%endfor%}
sort()過濾器使傳入的數(shù)據(jù)排序

參見以下效果圖:


數(shù)據(jù)排序循環(huán)顯示
2.2模板可以循環(huán)顯示應用傳遞的字典
  • index.py文件里增加字典數(shù)據(jù)
scores=[{'name':'michael','age':99},{'name':'yanyan','age':98},{'name':'tim','age':100}]
  • index.html模板文件循環(huán)顯示
            {%for score in scores%}
            <table border="1">
                <tr>
                <th>Index</th>
                <th>Name</th>
                <th>Age</th>
                </tr>
                <tr>
                <td>{{loop.index}}</td>
                <td>{{score.name}}</td>
                <td>{{score.age}}</td>
                </tr>
            </table>
            {%endfor%}

loop.index可以在循環(huán)內迭代當前的索引,從1開始算

參見以下效果圖:

字段循環(huán)

3鲫售、模板復用

網(wǎng)頁復用是網(wǎng)站設計非常重要的特性共螺,比如頁面頭部的網(wǎng)站名稱,用戶登錄信息情竹。頁面尾部的版權信息等藐不。

3.1模板繼承

  • 新建一個父模板base.html,模板包含title內容
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
            <title>{{title}}</title>
    </head>
    <body>
        Here is Base.html<br>
        basevar:{{basevar}}
        <hr>
        {%block body%}{%endblock%}
    </body>
</html>

{%block body%} {%endblock%} 兩個大括弧代表子模板從這里繼承插入,其中body名字自定義秦效。

  • 新建一個子模板child.html
{%extends 'base.html'%}
{%block body%}
Here is child.html
<br>
contentvar:{{contentvar}}
{%endblock%}

子模板從哪個父模板繼承通過extends標記
子模板的內容寫在{%block body%} {%endblock%}兩個大括弧內雏蛮。

  • index.py新增以下內容,增加一個新的路由(路由內容放在下節(jié)詳述)
@app.route('/child')
def child():
    title='Michael Index'
    basevar='base var'
    contentvar='content var'
    return render_template('child.html',title=title,basevar=basevar,contentvar=contentvar)

參見以下效果圖:瀏覽器訪問child頁面阱州,分割符上的內容繼承自base.html


繼承模板圖

7. 補充內容

Flask默認模板文件都位于templates目錄下挑秉,也可以通過生成app對象修改默認目錄app = Flask(__name__,template_folder='tpl')
參考內容:使用Jinjia2模板(上),使用Jinjia2模板(中)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市苔货,隨后出現(xiàn)的幾起案子犀概,更是在濱河造成了極大的恐慌立哑,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阱冶,死亡現(xiàn)場離奇詭異刁憋,居然都是意外死亡,警方通過查閱死者的電腦和手機木蹬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門至耻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镊叁,你說我怎么就攤上這事尘颓。” “怎么了晦譬?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵疤苹,是天一觀的道長。 經(jīng)常有香客問我敛腌,道長卧土,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任像樊,我火速辦了婚禮尤莺,結果婚禮上,老公的妹妹穿的比我還像新娘生棍。我一直安慰自己颤霎,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布涂滴。 她就那樣靜靜地躺著友酱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柔纵。 梳的紋絲不亂的頭發(fā)上缔杉,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音首量,去河邊找鬼壮吩。 笑死,一個胖子當著我的面吹牛加缘,可吹牛的內容都是我干的。 我是一名探鬼主播觉啊,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼拣宏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杠人?” 一聲冷哼從身側響起勋乾,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤宋下,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辑莫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體学歧,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年各吨,在試婚紗的時候發(fā)現(xiàn)自己被綠了枝笨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡揭蜒,死狀恐怖横浑,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情屉更,我是刑警寧澤徙融,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站瑰谜,受9級特大地震影響欺冀,放射性物質發(fā)生泄漏。R本人自食惡果不足惜萨脑,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一隐轩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砚哗,春花似錦龙助、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仅淑,卻和暖如春称勋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涯竟。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工赡鲜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庐船。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓银酬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親筐钟。 傳聞我的和親對象是個殘疾皇子揩瞪,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容