flask中jinjia2模板引擎的使用詳解3
模板繼承
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