網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一 模板語(yǔ)法傳值
方式一:
# urls.py
path('template', views.template)
# views.py
def template(request):
name = "jasper"
age = "18"
return render(request, 'template.html', {"name": name, "age": age})
?<p>姓名:{{ name }} ?年齡:{{ age }}</p>
方式二:關(guān)鍵字locals
def template(request):
name = "jasper"
age = "18"
return render(request, 'template.html', locals())
傳值范圍:
- 基本數(shù)據(jù)類型直接傳遞使用。
- 函數(shù)名的傳遞會(huì)自動(dòng)加括號(hào)執(zhí)行并展示函數(shù)返回值(如果函數(shù)需要參數(shù),則不會(huì)執(zhí)行,也不會(huì)展示),模板語(yǔ)法不支持有參函數(shù)。
- 類名的傳遞也會(huì)自動(dòng)加括號(hào)產(chǎn)生對(duì)象。
- 對(duì)象的傳遞則直接引用。
二 過(guò)濾器
add
{{ value|add:"2" }}
如果 value 是 4,那么輸出將是 6。
這個(gè)過(guò)濾器將首先嘗試將兩個(gè)值強(qiáng)制轉(zhuǎn)為整數(shù)。如果失敗了,它將嘗試將兩個(gè)值加在一起。這對(duì)某些數(shù)據(jù)類型(字符串、列表等)有效,而對(duì)其他類型則失敗。如果失敗,結(jié)果將是一個(gè)空字符串。
capfirst
{{ value|capfirst }}
將值的第一個(gè)字符大寫(xiě)。如果第一個(gè)字符不是字母,這個(gè)過(guò)濾器就沒(méi)有效果。
如果 value 是 “django”,則輸出為 “Django”。
center
在給定寬度的字段中使數(shù)值居中。
"{{ value|center:"15" }}"
如果 value 是 “Django”,輸出將是 " Django "。
cut
從給定的字符串中刪除參數(shù)的所有值。
{{ value|cut:" " }}
如果 value 是 “String with spaces”,輸出將是 “Stringwithspaces”。
date
根據(jù)給定的格式設(shè)置日期。
例子:
{{ value|date:"D d M Y" }}
如果 value 是一個(gè) datetime 對(duì)象(例如,datetime.datetime.datetime.now() 的結(jié)果),輸出將是字符串 ‘Wed 09 Jan 2008’。
傳遞的格式可以是預(yù)定義的 DATE_FORMAT、DATETIME_FORMAT、SHORT_DATE_FORMAT 或 SHORT_DATETIME_FORMAT, 或者是使用上表中顯示的格式指定器的自定義格式。請(qǐng)注意,預(yù)定義的格式可能會(huì)根據(jù)當(dāng)前的 locale 而有所不同。
假設(shè) USE_L10N 為 True 和 LANGUAGE_CODE 為例如 “es”,那么對(duì)于:
{{ value|date:"SHORT_DATE_FORMAT" }}
輸出將是字符串 “09/01/2008” (Django 自帶的 “SHORT_DATE_FORMAT” 格式指定符是 “d/m/Y”)。
當(dāng)不使用格式字符串時(shí),使用 DATE_FORMAT 格式指定器。假設(shè)設(shè)置與前一個(gè)例子相同:
{{ value|date }}
輸出 9 de Enero de 2008 (DATE_FORMAT’ 格式指定符為 r’j\d\e F\d\e Y’)。“d” 和 “e” 都是反斜杠,因?yàn)榉駝t每一個(gè)都是一個(gè)格式字符串,分別顯示日期和時(shí)區(qū)名稱。
你可以將 date 與 time 過(guò)濾器結(jié)合起來(lái),以呈現(xiàn)一個(gè) datetime 值的完整表示。例如:
{{ value|date:"D d M Y" }} {{ value|time:"H:i" }}
default
如果值為 False,則使用給定的默認(rèn)值。否則,使用該值。 例子:
{{ value|default:"nothing" }}
如果 value 是 “” (空字符串),輸出將是 nothing。
更多內(nèi)置過(guò)濾器請(qǐng)查看官方文檔:https://docs.djangoproject.com/zh-hans/4.1/ref/templates/builtins/#ref-templates-builtins-filters
三 標(biāo)簽
參考官方文檔:https://docs.djangoproject.com/zh-hans/4.1/ref/templates/builtins/#ref-templates-builtins-filters
四 自定義模板標(biāo)簽和過(guò)濾器
Django 模板語(yǔ)言包含了很多 內(nèi)置 tags 和 filters,設(shè)計(jì)目的是滿足應(yīng)用需要占位邏輯需求。極少情況下,你可能發(fā)現(xiàn)需要的功能未被核心模板集覆蓋。你能通過(guò) Python 代碼自定義 tags 和 filters 擴(kuò)展集成模板引擎,通過(guò) {% load %} 標(biāo)簽使其可用。
該應(yīng)用應(yīng)包含一個(gè) templatetags 目錄,與 models.py, views.py 等同級(jí)。若該目錄不存在,創(chuàng)建它——不要忘了用 init.py 文件確保目錄被視作一個(gè) Python 包。
自定義的 tags 和 filters 會(huì)保存在模塊名為 templatetags 的目錄內(nèi)。模塊文件的名字即稍候你用來(lái)加載 tags 的名字,所以小心不要采用一個(gè)可能與其它應(yīng)用自定義的 tags 和 filters 沖突的名字。
為了使 {% load %} 標(biāo)簽生效,包含自定義標(biāo)簽的應(yīng)用必須包含在 INSTALLED_APPS 中。這是個(gè)安全特性:它允許你在一個(gè)主機(jī)上持有多個(gè)模板庫(kù),而不是讓每個(gè) Django 安裝都能訪問(wèn)所有的庫(kù)。
我們并未限制放入 templatetags 包中的模塊數(shù)量。只需牢記 {% load %} 語(yǔ)句會(huì)加載名字指定 Python 模塊的 tags/filters,而不是應(yīng)用。
要成為一個(gè)可用的 tag 庫(kù),模塊必須包含一個(gè)名為 register 的模塊級(jí)變量,它是一個(gè) template.Library 實(shí)例。所有的 tags 和 filters 均在其中注冊(cè)。所以,在模塊的開(kāi)始,輸入以下內(nèi)容:
from django import template
register = template.Library()
4.1 自定義過(guò)濾器
@register.filter(name='myfilter')
def my_add(a, b):
return a + b
4.2 自定義標(biāo)簽函數(shù)
@register.simple_tag(name='mt')
def func(a, b, c, d):
return a + b + c + d
4.3 自定義inclusion_tag
@register.inclusion_tag(filename='it.html')
def index(n):
html = []
for i in range(n):
html.append('第%s頁(yè)'%i)
return locals()
參考官方文檔:https://docs.djangoproject.com/zh-hans/4.1/howto/custom-template-tags/
五 模板的繼承
# 在html頁(yè)面打上標(biāo)記
{% block 名字 %}
?? ?html標(biāo)簽
{% endblock %}# 擴(kuò)展html界面
{% extends 'html文件' %}{% block 名字 %}
?? ?html標(biāo)簽
{% endblock %}# 一般情況下模板中至少應(yīng)該有三個(gè)區(qū)域
css、js、content
子板中還可以使用母板的內(nèi)容 {{ block.super }}
六 模板的導(dǎo)入
將html頁(yè)面的某個(gè)部分當(dāng)做模塊的形式導(dǎo)入使用
{% include 'menu.html' %}
原文鏈接:https://blog.csdn.net/weixin_68531269/article/details/126668940
相關(guān)推薦
- 2022-08-02 Python面試之os.system()和os.popen()的區(qū)別詳析_python
- 2022-10-20 C++?float、double判斷是否等于0問(wèn)題_C 語(yǔ)言
- 2022-08-22 C++示例詳解Prim算法與優(yōu)先隊(duì)列_C 語(yǔ)言
- 2023-04-07 React?Fiber構(gòu)建源碼解析_React
- 2024-03-10 SpringMVC中Model和ModelAndView的區(qū)別
- 2022-08-22 ?C++?new?和?delete?關(guān)鍵字詳解_C 語(yǔ)言
- 2023-03-20 C#字符集編碼的使用及說(shuō)明_C#教程
- 2023-05-08 C語(yǔ)言中棧的結(jié)構(gòu)和函數(shù)接口的使用示例_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支