Flask學(xué)習(xí)日志(八) - 模板繼承、包含與宏

每日壁紙.jpg

文 / 秦未

模板繼承應(yīng)該說每個模板引擎都有棺蛛,主要目的是增加HTML代碼復(fù)用性怔蚌,減少代碼冗余。

1.簡單模板繼承

我們將about.html復(fù)制一份取名base.html旁赊,現(xiàn)在我們看到的base.html內(nèi)容是這樣的:

{#/app/templates/blog/about.html#}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>關(guān)于頁面</title>
</head>
<body>

{{ text|safe }}
{{ body|md|safe }}
{#{{ read_md('md.md')|md|safe }}#}

</body>
</html>

模板繼承的語法:

在私有的地方桦踊,如body標(biāo)簽內(nèi)的內(nèi)容寫上:

{% block name %}
{% endblock name %}

這代表占位,所以我們修改一下base.html:

{#/app/templates/blog/base.html#}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>關(guān)于頁面</title>
</head>
<body>

{% block name %}
{% endblock %}

</body>
</html>

然后修改about.html:

{#/app/templates/blog/about.html#}
{#繼承模板 路徑#}
{% extends 'blog/base.html' %}


{% block name %}
    {#私有內(nèi)容#}
    {{ text|safe }}
    {{ body|md|safe }}
    {#{{ read_md('md.md')|md|safe }}#}
{% endblock %}

ps:模板繼承支持嵌套使用终畅。

運(yùn)行看看:

運(yùn)行狀態(tài).png

查看源代碼籍胯,發(fā)現(xiàn)與之前并無差別,但盡量少用模板中的注釋离福,因?yàn)闀a(chǎn)生空白杖狼,影響美觀。

繼承模板中外部變量的引用:

由于 black 代表一個封閉區(qū)域妖爷,所以直接在里面引用變量會報錯本刽,我們只需要在{% block name %} 里面加一個參數(shù) -- scoped,記住在繼承模板(base.html)內(nèi)加赠涮。

2.include(包含)組件

有時候我們需要導(dǎo)入一個小的組件在一個頁面中子寓,比如首頁和關(guān)于頁內(nèi)引用的css文件不同,我們不可能把black寫那么多笋除,這個時候我們就需要include來幫忙了斜友。

由于我示例的項(xiàng)目并不包含一個真實(shí)的HTML模板,所以垃它,這里我只把 “<title>關(guān)于頁面</title>”作為演示鲜屏,原理一樣的。

首先我們把base.html內(nèi)的<title>關(guān)于頁面</title>剪切出來国拇,新建立一個 _about.html 文件洛史,復(fù)制到這個文件中。

再將原來base.html缺少的部分填上:{% include 'blog/_about.html' %}:

{#/app/templates/blog/base.html#}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    {% include 'blog/_about.html' %}
</head>
<body>

{% block name scoped%}
{% endblock name %}

</body>
</html>

運(yùn)行后酱吝,查看并無差別也殖,更多組合使用,請自行嘗試务热。

3.模板文件中的宏

我們先修改index.html內(nèi)容:

<!--/app/templates/blog/index.html-->
{% extends 'blog/base.html' %}

{% block name %}
    {% macro input(name,value='',type='text',size=20) %}
        <input type="{{ type }}"
               name="{{ name }}"
               value="{{ value }}"
               size="{{ size }}"
        />
    {% endmacro %}

    <h1>{{ text }}</h1>
    <a href="{{ url_for('.about') }}">about</a>
    <a href="{{ url_for('.login') }}">login</a>
{% endblock %}

其中 macro 就是定義了一個宏(和Python函數(shù)一樣的)

用法其實(shí)也很簡單:

在模板中寫:{{ input('username') }}忆嗜,這樣就導(dǎo)入了一個 input 標(biāo)簽了。

但如果同時引用很多個宏崎岂,豈不是很亂捆毫?!

對于這個問題 jinja2也替我們考慮到了冲甘,我們只要把宏抽取出來放在一個html文件里绩卤,然后在用的模板中導(dǎo)入就好了途样。

{#/app/templates/blog/_macro.html#}
{% macro input(name,value='',type='text',size=20) %}
    <input type="{{ type }}"
           name="{{ name }}"
           value="{{ value }}"
           size="{{ size }}"
    />
{% endmacro %}

然后修改一下原模板內(nèi)容:

<!--/app/templates/blog/index.html-->
{% extends 'blog/base.html' %}

{% import 'blog/_macro.html' as macro %}

{% block name %}

    <h1>{{ text }}</h1>
    <a href="{{ url_for('.about') }}">about</a>
    <a href="{{ url_for('.login') }}">login</a>

    {{ macro.input('username') }}
{% endblock %}

{% import 'blog/_macro.html' as macro %} 中 as 為取別名,作為對象引用濒憋。

使用時函數(shù)名前綴加別名:{{ macro.input('username') }}娘纷。

今天就說這么多。

---end---

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跋炕,一起剝皮案震驚了整個濱河市赖晶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辐烂,老刑警劉巖遏插,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纠修,居然都是意外死亡胳嘲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門扣草,熙熙樓的掌柜王于貴愁眉苦臉地迎上來了牛,“玉大人,你說我怎么就攤上這事辰妙∮セ觯” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵密浑,是天一觀的道長蛙婴。 經(jīng)常有香客問我,道長尔破,這世上最難降的妖魔是什么街图? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮懒构,結(jié)果婚禮上餐济,老公的妹妹穿的比我還像新娘。我一直安慰自己胆剧,他們只是感情好絮姆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赞赖,像睡著了一般滚朵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上前域,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音韵吨,去河邊找鬼匿垄。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椿疗。 我是一名探鬼主播漏峰,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼届榄!你這毒婦竟也來了浅乔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤铝条,失蹤者是張志新(化名)和其女友劉穎靖苇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體班缰,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贤壁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了埠忘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脾拆。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莹妒,靈堂內(nèi)的尸體忽然破棺而出名船,到底是詐尸還是另有隱情,我是刑警寧澤旨怠,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布包帚,位于F島的核電站,受9級特大地震影響运吓,放射性物質(zhì)發(fā)生泄漏渴邦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一拘哨、第九天 我趴在偏房一處隱蔽的房頂上張望谋梭。 院中可真熱鬧,春花似錦倦青、人聲如沸瓮床。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隘庄。三九已至,卻和暖如春癣亚,著一層夾襖步出監(jiān)牢的瞬間丑掺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工述雾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留街州,地道東北人兼丰。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像唆缴,于是被迫代替她去往敵國和親鳍征。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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