Python Django框架介紹之模板標(biāo)簽及模板的繼承
一、標(biāo)簽語(yǔ)法
由%}和 {% 來(lái)定義的,例如:{%tag%} {%endtag%},完整的標(biāo)簽有開(kāi)始就有結(jié)束,如條件語(yǔ)句,有條件判斷的開(kāi)始,也對(duì)應(yīng)有條件的結(jié)束。
二、常見(jiàn)標(biāo)簽
if條件判斷
- if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,來(lái)進(jìn)行判斷。ifequal/ifnotequal
for循環(huán)
- for ... in ...:和python中的用法一樣。
- forloop.counter:當(dāng)前迭代的次數(shù),下標(biāo)從1開(kāi)始。1,2,3....
- forloop.counter0:當(dāng)前迭代的次數(shù),下標(biāo)從0開(kāi)始。指定下標(biāo),上面一種不指定的默認(rèn)從1開(kāi)始
- forloop.revcounter:與forloop.counter一樣,不同在于下標(biāo)呈倒序,從大到小。
- forloop.revcounter0:forloop.counter0一樣,不同在于下標(biāo)呈倒序,從大到小。
- forloop.frist:返回一個(gè)布爾值,如果是第一次迭代,返回true,否則返回false。
- forloop.last:返回布爾值,如果是最后一次迭代,返回true,否則返回false
- forloop.parentloop:如果發(fā)生多層for循環(huán)嵌套,那么這個(gè)變量返回的是上一層的for。
- for...in...empty...:如果沒(méi)有數(shù)據(jù),跳到empty中。
其他重要標(biāo)簽
load:加載第三方標(biāo)簽。常見(jiàn)用的是{% load static%}
url:返回一個(gè)命名了的URL的絕對(duì)路徑。
with:緩存一個(gè)變量。
autoescape:開(kāi)啟和關(guān)閉自動(dòng)轉(zhuǎn)義。
三、標(biāo)簽例子
if條件標(biāo)簽代碼例子
# views.py文件 def testif(request): complex = { 'name':'python', } return render(request,'標(biāo)簽-if.html',complex) # urls.py文件 urlpatterns = [path('testif/', views.testif),]
<!--if標(biāo)簽?zāi)0逦募?-> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>if模板</title> <style>span{font-size: 40px;color: #d70b35;}</style> </head> <body> {% if name == "python" %} 這是<span>{{name}}</span>頁(yè)面 {% elif name == "django" %} 這是<span>{{name}}</span>頁(yè)面 {% else %} 確定是<span>{{name}}</span>嗎? {% endif %} </body> </html>
for 循環(huán)標(biāo)簽代碼例子
# views.py文件 def testfor(request): ls = ['1','2','3','4','5'] complex ={ 'ls':ls, } return render(request,'標(biāo)簽-for.html',complex) # urls.py文件 urlpatterns = [path('testfor/', views.testfor),]
<!--for標(biāo)簽?zāi)0逦募?-> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>for模板</title> <style>a{font-size: 25px;}</style> </head> <body> {% for i in ls %} {% if forloop.counter == 3 %} <a rel="external nofollow" >百度</a><br> {% else %} <a rel="external nofollow" >CSDN</a><br> {% endif %} {% endfor %} </body> </html>
url頁(yè)面轉(zhuǎn)換標(biāo)簽例子
注意:親測(cè)。。。使用url頁(yè)面轉(zhuǎn)換標(biāo)簽的時(shí)候,注意模板中的引用模板鏈接名稱(chēng)應(yīng)該是urlpatterns中path的name的值,如果是直接使用接口名稱(chēng)會(huì)報(bào)錯(cuò)
錯(cuò)誤演示
正確演示
代碼
## views.py文件 def testurl(request): return render(request,'URL頁(yè)面轉(zhuǎn)換.html') ## urls.py 文件 urlpatterns = [path('testurl/', views.testurl),]
<!-- url標(biāo)簽?zāi)0逦募? --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>URL頁(yè)面轉(zhuǎn)換</title> <style> a{font-size: 25px;color: #10e59d } </style> </head> <body> <a href="/index/" rel="external nofollow" >index模板</a><br> <a href="{% url 'temp' %}" rel="external nofollow" >使用ur標(biāo)簽temp模板</a><br> <a href="{% url 'test' 999 %}" rel="external nofollow" >使用url標(biāo)簽進(jìn)行添加參數(shù)傳遞</a> </body> </html>
四、模板的繼承
Django模版引擎中最強(qiáng)大也是最復(fù)雜的部分就是模版繼承了。使用模板的作用在于提高代碼的復(fù)用性。 模版繼承可以讓你創(chuàng)建一個(gè)基本的“骨架”模版,它包含您站點(diǎn)中的全部元素,并且可以定義能夠被子模版覆蓋的 blocks。
模板繼承使用extends標(biāo)簽實(shí)現(xiàn)。通過(guò)使用block來(lái)給子模板開(kāi)放接口。
1、extends必須是模板中的第一個(gè)出現(xiàn)的標(biāo)簽。
2、子模板中的所有內(nèi)容,必須出現(xiàn)在父模板定義好的block中,否則django將不會(huì)渲染。
3、如果出現(xiàn)重復(fù)代碼,就應(yīng)該考慮使用模板。
4、盡可能多的定義block,方便子模板實(shí)現(xiàn)更細(xì)的需求。
5、如果在某個(gè)block中,要使用父模板的內(nèi)容,使用block.super獲取。
代碼例子
<!-- 模板的引用頁(yè) --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>引用頁(yè)</title> <style> .p2{ font-size: 25px; color: blue; } </style> </head> <body> <h style="font-size:40px;color:red;">這是引用頁(yè)的內(nèi)容</h> </body> </html>
<!-- 模板的繼承頁(yè) --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}默認(rèn)標(biāo)題{% endblock %}</title> <style> .p1{font-size: 30px;color: #8dff50 } span{ font-size: 25px; color: darkkhaki; } </style> </head> <body> {% block content %} <span>這是默認(rèn)內(nèi)容</span> {% endblock %} {% block demo %} <span>這是演示內(nèi)容</span> {% endblock %} </body> </html>
<!-- 模板繼承的主頁(yè) --> {% extends '模板/繼承頁(yè).html' %} {% block title %}主頁(yè)(繼承與引用){% endblock %} {% block content %} <p class="p1">這是通過(guò)繼承父類(lèi)的:{{ block.super }}</p><br> <p class="p1">這是子模版的內(nèi)容,沒(méi)有寫(xiě)block就不會(huì)顯示</p><br> {% endblock %} {% block demo %} <p class="p2">這是通過(guò)include引用的其他模板的內(nèi)容:{% include '模板/引用頁(yè).html' %}</p> {% endblock %}
演示結(jié)果
通過(guò)設(shè)置css樣式,可以看出,繼承主頁(yè)繼承和引用了繼承模板文件及引用模板文件中的css樣式。
到此這篇關(guān)于Python Django框架介紹之模板標(biāo)簽及模板的繼承的文章就介紹到這了,更多相關(guān)Django框架之模板標(biāo)簽及模板的繼承內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)雙因素驗(yàn)證2FA的示例代碼
雙因素認(rèn)證(2FA)作為額外安全層為賬號(hào)登錄添加了第二層身份驗(yàn)證。確保賬號(hào)持有人是可以訪問(wèn)數(shù)字身份的唯-用戶(hù)。如果不使用雙因表認(rèn)證,企業(yè)將承擔(dān)巨大的安全風(fēng)險(xiǎn)。本文將用Python實(shí)現(xiàn)雙因素驗(yàn)證2FA,需要的可以參考一下2022-07-07Python中的偏函數(shù)及其廣泛應(yīng)用方式
這篇文章主要介紹了Python中的偏函數(shù)及其廣泛應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06詳解PyQt5 GUI 接收UDP數(shù)據(jù)并動(dòng)態(tài)繪圖的過(guò)程(多線(xiàn)程間信號(hào)傳遞)
這篇文章主要介紹了PyQt5 GUI 接收UDP數(shù)據(jù)并動(dòng)態(tài)繪圖(多線(xiàn)程間信號(hào)傳遞),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Python之標(biāo)點(diǎn)符號(hào)string.punctuation的使用
Python的string模塊提供了一個(gè)方便的屬性string.punctuation,其中包含所有ASCII標(biāo)點(diǎn)符號(hào)字符,這使得在處理和識(shí)別字符串中的標(biāo)點(diǎn)符號(hào)時(shí)非常有用,可以通過(guò)簡(jiǎn)單的in關(guān)鍵字來(lái)檢測(cè)字符是否為標(biāo)點(diǎn)2024-09-09Python批量修改xml的坐標(biāo)值全部轉(zhuǎn)為整數(shù)的實(shí)例代碼
這篇文章主要介紹了Python批量修改xml的坐標(biāo)值全部轉(zhuǎn)為整數(shù)的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11python 的 scapy庫(kù),實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子
今天小編就為大家分享一篇python 的 scapy庫(kù),實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07