Django4.0 模板-Django模板語(yǔ)言

2022-03-16 17:58 更新

語(yǔ)法

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)簽

標(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ò)濾器

過(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)自己的其他上下文處理器。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)