詳解Django模板層過濾器和繼承的問題
過濾器
模板層對變量的操作實(shí)際還有很多,過濾器就是其中一種。學(xué)過Linux系統(tǒng)的一定知道管道操作符,其可以將上一步輸出直接作為下一步輸入進(jìn)行處理,這里的過濾器就是類似管道符,其寫法也是以管道符|為標(biāo)志,允許我們對模板層獲得的變量進(jìn)行改變,例如大小寫轉(zhuǎn)換、增減大小等等
語法
{{ 變量|過濾器1|過濾器2:'值' |...}}
這里的過濾器可以分為兩類,一類是不帶參數(shù)的,例如lower,upper,safe;一類是帶參數(shù)的add:'10',冒號(hào)分隔,后面跟上值
| 過濾器 | 示例 | 說明 |
|---|---|---|
| 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("這是測試過濾器safe")</script>' #簡單的js代碼,可以彈出一個(gè)窗口
return render(request, 'home.html', dic)
home.html
<body>
<h2>過濾器upper: {{ str|upper }}</h2> # 全變成大寫字母
<h2>過濾器add: {{ num|add:'10' }}</h2> # 加10
<h2>過濾器safe: {{ script|safe }}</h2> # 不進(jìn)行html轉(zhuǎn)義,適用直接執(zhí)行js代碼,理解為代碼安全可以直接執(zhí)行
</body>


如果不適用safe則輸出原始字符串,不會(huì)執(zhí)行js代碼

除了以上過濾器,更多過濾器請參見https://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins
繼承
對于某個(gè)網(wǎng)站來說,一般又比較統(tǒng)一的風(fēng)格,例如無論點(diǎn)擊網(wǎng)頁哪個(gè)標(biāo)簽或者鏈接,導(dǎo)航欄和尾部都是基本一樣的內(nèi)容,真正變的是中間的內(nèi)容區(qū)域,如何才能讓不同的網(wǎng)頁有相同也有差異呢,django中對模板可以使用繼承的概念。
例如,有如下頁面,由三部分組成,第一塊是導(dǎo)航欄,無論哪個(gè)子頁面均是一樣,中間body區(qū)會(huì)因?yàn)辄c(diǎn)擊導(dǎo)航欄不同項(xiàng)目發(fā)生變化,而最后一塊尾部每個(gè)頁面都是一樣,如何實(shí)現(xiàn)上述要求呢?

- 求同:Django模板層通過
{% extends 'home.html' %}實(shí)現(xiàn)子頁面對home.html的繼承,也就是說只需要在每個(gè)子頁面寫上該行代碼即能完成對父頁面的繼承,但是需要注意的是不能繼承父頁面的相關(guān)視圖函數(shù)的變量 - 存異:在父頁面(home.html)中使用
{% block block_name %}...{% endblock block_name(可選) %}標(biāo)記塊,凡是在標(biāo)記塊中的內(nèi)容在子頁面都可以被修改,修改方法是在{% block block_name %}子頁面重寫內(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è)頁面都一樣 -->
<h2>
<a href="/home" rel="external nofollow" >主頁</a>
<a href="/music" rel="external nofollow" >音樂頻道</a>
<a href="/sport" rel="external nofollow" >運(yùn)動(dòng)頻道</a>
</h2>
<h2>
{% block body %}
<h2>歡迎來到主頁!(該部分區(qū)域因頁面而異)</h2>
{% endblock %}
<h3>如有問題請請聯(lián)系xxx@163.com(每個(gè)頁面都一樣)</h3>
</body>
</html>
music.html
{% extends 'home.html' %}
<!-- 修改body區(qū)域內(nèi)容 -->
{% block body %}
<h2>歡迎來到音樂頻道!</h2>
{% endblock %}
sport.html
{% extends 'home.html' %}
<!-- 修改body區(qū)域內(nèi)容 -->
{% block body %}
<h2>歡迎來到運(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)頁的基本架構(gòu)慢慢成熟起來,將一個(gè)主頁應(yīng)用到其他頁面,同時(shí)又保持其他頁面的差異,django的模板思想越來越清晰了。
到此這篇關(guān)于Django模板層過濾器和繼承的文章就介紹到這了,更多相關(guān)Django模板層過濾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 時(shí)間的訪問和轉(zhuǎn)換 time示例小結(jié)
Python 的 time 模塊提供了各種與時(shí)間處理相關(guān)的功能,包括獲取當(dāng)前時(shí)間、操作日期/時(shí)間以及執(zhí)行與時(shí)間相關(guān)的各種其它功能,這篇文章主要介紹了python 時(shí)間的訪問和轉(zhuǎn)換 time,需要的朋友可以參考下2024-05-05
Python實(shí)現(xiàn)蒙特卡洛模擬的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)蒙特卡洛模擬,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2023-03-03
CNN卷積函數(shù)Conv2D()各參數(shù)的含義及用法解讀
這篇文章主要介紹了CNN卷積函數(shù)Conv2D()各參數(shù)的含義及用法解讀,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Python+wxPython實(shí)現(xiàn)將圖片轉(zhuǎn)換為草圖
將照片轉(zhuǎn)換為藝術(shù)風(fēng)格的草圖是一種有趣的方式,可以為您的圖像添加獨(dú)特的效果,本文主要介紹了如何Python和wxPython來實(shí)現(xiàn)這一目標(biāo),需要的可以參考下2023-08-08
Python3讀取和寫入excel表格數(shù)據(jù)的示例代碼
這篇文章主要介紹了Python3讀取和寫入excel表格數(shù)據(jù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Python中等待5秒并暫停執(zhí)行的方法總結(jié)
Python 具有各種功能和庫來創(chuàng)建交互式應(yīng)用程序,用戶可以在其中提供輸入和響應(yīng), 我們可以創(chuàng)建需要暫停應(yīng)用程序執(zhí)行的情況,本文主要和大家分享三個(gè)Python 中等待 5 秒并暫停執(zhí)行的方法,有需要的可以參考下2023-10-10
Python實(shí)現(xiàn)搜索Google Scholar論文信息的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)搜索Google Scholar論文信息的功能,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-03-03
python 將列表里的字典元素合并為一個(gè)字典實(shí)例
這篇文章主要介紹了python 將列表里的字典元素合并為一個(gè)字典實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09

