1. 程式人生 > >flask中jinjia2模板引擎的使用詳解3

flask中jinjia2模板引擎的使用詳解3

編程語言 Python

接上文

模板繼承

Jinji2中的模板繼承是jinjia2比較強大的功能之一。

模板繼承可以定義一個父級公共的模板,把同一類的模板框架定義出來共享。

這樣做一方面可以提取共享代碼,減少代碼冗余和重復的工作量

另一方面,對於後期的維護和管理也非常方便。

一個根模板(或叫基模板)主要有三部分組成:

一是公共的js,css等資源文件的引用,

二是定義好一個布局框架,

三是定義子模板可以重寫的部分(block)

下面我們以一個例子來說明模板繼承的使用方法

1. 創建一個基模板

選中templates文件夾,右鍵選擇新建->HTML文件

技術分享圖片

在彈出的窗口中輸入要創建的文件名:base.html,

技術分享圖片

點擊確定

然後把下面的代碼copy到base.html中

<!DOCTYPE PUBLIC >
<>
<>
<>
     <{{ (,=) }}/>
     {% %}
     <>{% %}{% %} - My Webpage</>
     {% %}
</>
<>
     <>{% %}{% %}</>
     <>
         {% %}
         Copyright 2018
         {% %}
     </>
</>
 

技術分享圖片

在這個基模板中,可以看到定義了4個block,每個個block就是告訴子模板,可以重寫這些block中的內容

在同一個模板中不能定義同名的block

註意在static文件夾中添加style.css文件:

技術分享圖片

Style.css文件中只有一行代碼:

{
     :;
}

技術分享圖片

2. 創建一個子模板

用同樣的方法在template下面創建一個sub.html文件,代碼如下

{% %}
{% %}Index{% %}
{% %}
     {{ () }}
     <>
         .{ : ; }
     </>
{% %}
{% %}
     <>Index</>
     <>
       Welcome on my awesome homepage.
     </>
{% %}

技術分享圖片

可以看到這個子模板用extends方法繼承了base.html模板,然後又重寫了 title, head, content三個block中的內容

一個模板中不能出現重復名稱的block塊

其中的supper()用來調用父級模板中的block塊內容,在本例中,supper()會把父級的head塊內容寫到子模板中

3. 定義route

在code.py文件中添加sub.html的route定義

@app.route()
renderSub():
     render_template()

技術分享圖片

運行效果

技術分享圖片

如果想多次調用一個block塊,可以使用self.block塊名稱進行調用,比如,我們把<h1>Index</h1>這裏替換成<h1>{{self.title()}}</h1>

技術分享圖片

運行效果:

技術分享圖片


本文源碼地址:鏈接:https://pan.baidu.com/s/1eLtPlL4wyV4tu6TJCzj2rw 密碼:dpo2

flask中jinjia2模板引擎的使用詳解3