flask中jinjia2模板引擎详解3
接上文
模板繼承
Jinji2中的模板繼承是jinjia2比較強大的功能之一。
?
模板繼承可以定義一個父級公共的模板,把同一類的模板框架定義出來共享。
這樣做一方面可以提取共享代碼,減少代碼冗余和重復的工作量
另一方面,對于后期的維護和管理也非常方便。
?
一個根模板(或叫基模板)主要有三部分組成:
一是公共的js,css等資源文件的引用,
二是定義好一個布局框架,
三是定義子模板可以重寫的部分(block)
?
下面我們以一個例子來說明模板繼承的使用方法
選中templates文件夾,右鍵選擇新建->HTML文件
?
?
在彈出的窗口中輸入要創建的文件名:base.html,
?
?
點擊確定
然后把下面的代碼copy到base.html中
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><html lang="en"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" href="{{ url_for('static',filename='style.css') }}" />{% block head %}<title>{% block title %}{% endblock %} - My Webpage</title>{% endblock %}</head><body><div id="content">{% block content %}{% endblock %}</div><div id="footer">{% block footer %}©Copyright 2018{% endblock %}</div></body>?
?
在這個基模板中,可以看到定義了4個block,每個個block就是告訴子模板,可以重寫這些block中的內容
在同一個模板中不能定義同名的block
注意在static文件夾中添加style.css文件:
?
Style.css文件中只有一行代碼:
body{background-color:red;}?
用同樣的方法在template下面創建一個sub.html文件,代碼如下
{% extends "base.html" %}{% block title %}Index{% endblock %}{% block head %}{{ super() }}<style type="text/css">.important { color: #336699; }</style>{% endblock %}{% block content %}<h1>Index</h1><p class="important">Welcome on my awesome homepage.</p>{% endblock %}?
?
可以看到這個子模板用extends方法繼承了base.html模板,然后又重寫了 title, head, content三個block中的內容
一個模板中不能出現重復名稱的block塊
其中的supper()用來調用父級模板中的block塊內容,在本例中,supper()會把父級的head塊內容寫到子模板中
?
在code.py文件中添加sub.html的route定義
@app.route("/tmpl/sub")def renderSub():return render_template("sub.html")?
?
運行效果
?
如果想多次調用一個block塊,可以使用self.block塊名稱進行調用,比如,我們把<h1>Index</h1>這里替換成<h1>{{self.title()}}</h1>
?
運行效果:
?
?
轉載于:https://www.cnblogs.com/itxb/p/8511380.html
總結
以上是生活随笔為你收集整理的flask中jinjia2模板引擎详解3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spark UDAF
- 下一篇: C++程序代码优化的方法