W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Django 模板是使用 Django 模板語(yǔ)言標(biāo)記的一個(gè)文本文檔或Python字符串。模板引擎可以識(shí)別和解釋一些構(gòu)造。主要是變量和標(biāo)簽。
模板是通過(guò)上下文來(lái)渲染的。渲染用變量的值替換變量,變量的值在上下文中查找,并執(zhí)行標(biāo)簽。其他的一切都按原樣輸出。
Django 模板語(yǔ)言的語(yǔ)法涉及四個(gè)構(gòu)造。
變量從上下文中輸出一個(gè)值,上下文是一個(gè)類似于字典的對(duì)象,將鍵映射到值。
變量被 ?{{
? 和? }}
?包圍,如下所示:
My first name is {{ first_name }}. My last name is {{ last_name }}.
在上下文為 ?{'first_name': 'John', 'last_name': 'Doe'}
? 的情況下,該模板渲染為:
My first name is John. My last name is Doe.
字典查找,屬性查找和列表索引查找均以點(diǎn)符號(hào)實(shí)現(xiàn):
{{ my_dict.key }}
{{ my_object.attribute }}
{{ my_list.0 }}
如果變量解析為可調(diào)用對(duì)象,則模板系統(tǒng)將不帶任何參數(shù)的情況下調(diào)用它,并使用其結(jié)果代替可調(diào)用對(duì)象。
標(biāo)簽在渲染過(guò)程中提供了任意邏輯。
這個(gè)定義是故意含糊的。例如,標(biāo)簽可以輸出內(nèi)容,或用作控制結(jié)構(gòu)如?if
?語(yǔ)句和 ?for
?循環(huán),或從數(shù)據(jù)庫(kù)中抓取內(nèi)容,甚至可以訪問(wèn)其他模板標(biāo)簽。
標(biāo)簽被 ?{%
? 和 ?%}
? 包圍,如下所示:
{% csrf_token %}
大多數(shù)標(biāo)簽都接受參數(shù):
{% cycle 'odd' 'even' %}
一些標(biāo)簽需要開始和結(jié)束標(biāo)簽:
{% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}
過(guò)濾器轉(zhuǎn)換變量和標(biāo)簽參數(shù)的值。
它們看起來(lái)像這樣:
{{ django|title }}
在 ?{'django': 'the web framework for perfectionists with deadlines'}
? 的上下文中,這個(gè)模板渲染為:
The Web Framework For Perfectionists With Deadlines
有些過(guò)濾器需要一個(gè)參數(shù):
{{ my_date|date:"Y-m-d" }}
{# this won't be rendered #}
?{% comment %}
? 標(biāo)簽提供多行注釋。
?django.template.Engine
? 封裝了 Django 模板系統(tǒng)的實(shí)例。直接實(shí)例化 ?Engine
?的主要原因是為了在 Django 項(xiàng)目之外使用 Django 模板語(yǔ)言。
?django.template.backends.django.DjangoTemplates
? 是一個(gè)簡(jiǎn)單封裝,使 ?django.template.Engine
? 適應(yīng) Django 的模板后端API。
?django.template.Template
? 代表已編譯的模板。模板可以通過(guò) ?Engine.get_template()
? 或 ?Engine.from_string()
? 獲得。
同樣 ?django.template.backends.django.Template
? 是一個(gè)簡(jiǎn)單封裝,使 ?django.template.Template
? 適應(yīng)通用模板 API。
?django.template.Context
? 除了上下文數(shù)據(jù)外,還保存了一些元數(shù)據(jù)。它被傳遞給 ?Template.render()
? 來(lái)渲染模板。
?django.template.RequestContext
? 是 ?Context
?的子類,它儲(chǔ)存當(dāng)前的 ?HttpRequest
?并運(yùn)行模板上下文處理器。
通用 API 沒(méi)有對(duì)應(yīng)的概念。上下文數(shù)據(jù)以普通的 ?dict
?傳遞,而當(dāng)前的 ?HttpRequest
?則根據(jù)需要單獨(dú)傳遞。
模板加載器負(fù)責(zé)定位模板,加載模板,并返回 ?Template
?對(duì)象。
Django 提供了幾個(gè) 內(nèi)建模板加載器 并且支持 自定義模板加載器。
上下文處理器是接收當(dāng)前的 ?HttpRequest
?作為參數(shù),并返回一個(gè) ?dict
?的數(shù)據(jù)添加到渲染上下文的函數(shù)。
它們的主要用途是將所有模板共享的通用數(shù)據(jù)添加到上下文中,而無(wú)需在每個(gè)視圖中重復(fù)代碼。
Django 提供了許多 內(nèi)置上下文處理器,你也可以實(shí)現(xiàn)自己的其他上下文處理器。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: