詳解Django模板層過(guò)濾器和繼承的問(wèn)題
過(guò)濾器
模板層對(duì)變量的操作實(shí)際還有很多,過(guò)濾器就是其中一種。學(xué)過(guò)Linux系統(tǒng)的一定知道管道操作符,其可以將上一步輸出直接作為下一步輸入進(jìn)行處理,這里的過(guò)濾器就是類(lèi)似管道符,其寫(xiě)法也是以管道符|
為標(biāo)志,允許我們對(duì)模板層獲得的變量進(jìn)行改變,例如大小寫(xiě)轉(zhuǎn)換、增減大小等等
語(yǔ)法
{{ 變量|過(guò)濾器1|過(guò)濾器2:'值' |...}}
這里的過(guò)濾器可以分為兩類(lèi),一類(lèi)是不帶參數(shù)的,例如lower,upper,safe
;一類(lèi)是帶參數(shù)的add:'10'
,冒號(hào)分隔,后面跟上值
過(guò)濾器 | 示例 | 說(shuō)明 |
---|---|---|
lower | {{str | lower}} |
upper | {{str | upper}} |
safe | {{script | safe}} |
add | {{num | add:‘10'}} |
示例:
views.py
def home(request): dic = {} dic['str'] = 'abc' dic['num'] = 90 dic['script'] = '<script>alert("這是測(cè)試過(guò)濾器safe")</script>' #簡(jiǎn)單的js代碼,可以彈出一個(gè)窗口 return render(request, 'home.html', dic)
home.html
<body> <h2>過(guò)濾器upper: {{ str|upper }}</h2> # 全變成大寫(xiě)字母 <h2>過(guò)濾器add: {{ num|add:'10' }}</h2> # 加10 <h2>過(guò)濾器safe: {{ script|safe }}</h2> # 不進(jìn)行html轉(zhuǎn)義,適用直接執(zhí)行js代碼,理解為代碼安全可以直接執(zhí)行 </body>
如果不適用safe
則輸出原始字符串,不會(huì)執(zhí)行js代碼
除了以上過(guò)濾器,更多過(guò)濾器請(qǐng)參見(jiàn)https://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins
繼承
對(duì)于某個(gè)網(wǎng)站來(lái)說(shuō),一般又比較統(tǒng)一的風(fēng)格,例如無(wú)論點(diǎn)擊網(wǎng)頁(yè)哪個(gè)標(biāo)簽或者鏈接,導(dǎo)航欄和尾部都是基本一樣的內(nèi)容,真正變的是中間的內(nèi)容區(qū)域,如何才能讓不同的網(wǎng)頁(yè)有相同也有差異呢,django中對(duì)模板可以使用繼承的概念。
例如,有如下頁(yè)面,由三部分組成,第一塊是導(dǎo)航欄,無(wú)論哪個(gè)子頁(yè)面均是一樣,中間body區(qū)會(huì)因?yàn)辄c(diǎn)擊導(dǎo)航欄不同項(xiàng)目發(fā)生變化,而最后一塊尾部每個(gè)頁(yè)面都是一樣,如何實(shí)現(xiàn)上述要求呢?
- 求同:Django模板層通過(guò)
{% extends 'home.html' %}
實(shí)現(xiàn)子頁(yè)面對(duì)home.html的繼承,也就是說(shuō)只需要在每個(gè)子頁(yè)面寫(xiě)上該行代碼即能完成對(duì)父頁(yè)面的繼承,但是需要注意的是不能繼承父頁(yè)面的相關(guān)視圖函數(shù)的變量 - 存異:在父頁(yè)面(home.html)中使用
{% block block_name %}...{% endblock block_name(可選) %}
標(biāo)記塊,凡是在標(biāo)記塊中的內(nèi)容在子頁(yè)面都可以被修改,修改方法是在{% block block_name %}子頁(yè)面重寫(xiě)內(nèi)容{% endblock block_name(可選) %}
塊中重新更改內(nèi)容即可
home.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <!-- 導(dǎo)航欄,每個(gè)頁(yè)面都一樣 --> <h2> <a href="/home" rel="external nofollow" >主頁(yè)</a> <a href="/music" rel="external nofollow" >音樂(lè)頻道</a> <a href="/sport" rel="external nofollow" >運(yùn)動(dòng)頻道</a> </h2> <h2> {% block body %} <h2>歡迎來(lái)到主頁(yè)?。ㄔ摬糠謪^(qū)域因頁(yè)面而異)</h2> {% endblock %} <h3>如有問(wèn)題請(qǐng)請(qǐng)聯(lián)系xxx@163.com(每個(gè)頁(yè)面都一樣)</h3> </body> </html>
music.html
{% extends 'home.html' %} <!-- 修改body區(qū)域內(nèi)容 --> {% block body %} <h2>歡迎來(lái)到音樂(lè)頻道!</h2> {% endblock %}
sport.html
{% extends 'home.html' %} <!-- 修改body區(qū)域內(nèi)容 --> {% block body %} <h2>歡迎來(lái)到運(yùn)動(dòng)頻道!</h2> {% endblock %}
views.py
import re from django.http import HttpResponse from django.shortcuts import render def home(request): return render(request, 'home.html', dic) def music(request): return render(request, 'music.html') def sport(request): return render(request, 'sport.html')
urls.py
from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('home/', views.home), path('music/', views.music), path('sport/', views.sport), ]
學(xué)到這里,大家又可以小激動(dòng)一下了,一個(gè)靜態(tài)網(wǎng)頁(yè)的基本架構(gòu)慢慢成熟起來(lái),將一個(gè)主頁(yè)應(yīng)用到其他頁(yè)面,同時(shí)又保持其他頁(yè)面的差異,django的模板思想越來(lái)越清晰了。
到此這篇關(guān)于Django模板層過(guò)濾器和繼承的文章就介紹到這了,更多相關(guān)Django模板層過(guò)濾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)UDP程序通信過(guò)程圖解
這篇文章主要介紹了Python實(shí)現(xiàn)UDP程序通信過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05基于Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的銀行轉(zhuǎn)賬操作
這篇文章主要介紹了基于Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的銀行轉(zhuǎn)賬操作的相關(guān)資料,需要的朋友可以參考下2016-03-03Python實(shí)現(xiàn)計(jì)算兩個(gè)指定日期相差幾年幾月幾日
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)計(jì)算兩個(gè)日期之間相差多少年,多少月,多少天,文中的的示例代碼講解詳細(xì),需要的可以參考下2024-02-02python與mysql數(shù)據(jù)庫(kù)交互的實(shí)現(xiàn)
這篇文章主要介紹了python與mysql數(shù)據(jù)庫(kù)交互的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Python 測(cè)試框架unittest和pytest的優(yōu)劣
這篇文章主要介紹了Python 測(cè)試框架unittest和pytest的優(yōu)劣,幫助大家更好的進(jìn)行python程序的測(cè)試,感興趣的朋友可以了解下2020-09-09Python利用Beautiful Soup模塊創(chuàng)建對(duì)象詳解
這篇文章主要介紹了Python利用Beautiful Soup模塊創(chuàng)建對(duì)象的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03Python列表list解析操作示例【整數(shù)操作、字符操作、矩陣操作】
這篇文章主要介紹了Python列表list解析操作,結(jié)合實(shí)例形式分析了Python列表針對(duì)整數(shù)、字符及矩陣的解析操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-07-07python flask框架實(shí)現(xiàn)重定向功能示例
這篇文章主要介紹了python flask框架實(shí)現(xiàn)重定向功能,結(jié)合實(shí)例形式分析了flask框架重定向功能的實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2019-07-07