Django模版(一)
Django模版(一)
文章目錄
- Django模版(一)
- 一、模版
- 1.簡介
- 2.模板包含兩部分:
- 3.模板文件的使用
- 4.Django處理模板分為兩個(gè)階段:
- 5.模板文件加載順序
- 6.創(chuàng)建示例項(xiàng)目
- 二、模板語言
- 1.模板變量
- 2.標(biāo)簽
- 3.過濾器
- 4.自定義過濾器
- 5.注釋
一、模版
1.簡介
- 作為Web框架,Django提供了模板,用于編寫html代碼,還可以嵌入模板代碼更快更方便的完成頁面開發(fā),再通過在視圖中渲染模板,將生成最終的html字符串返回給客戶端瀏覽器。
- 模版致力于表達(dá)外觀,而不是程序邏輯。模板的設(shè)計(jì)實(shí)現(xiàn)了業(yè)務(wù)邏輯view與顯示內(nèi)容template的分離,一個(gè)視圖可以使用任意一個(gè)模板,一個(gè)模板可以供多個(gè)視圖使用。
2.模板包含兩部分:
- 靜態(tài)部分,包含html、css、js。
- 動(dòng)態(tài)部分,用于動(dòng)態(tài)去產(chǎn)生一些網(wǎng)頁內(nèi)容。通過模板語言來產(chǎn)生
Django模板語言,簡寫DTL,定義在django.template包中。 創(chuàng)建項(xiàng)目后,在"項(xiàng)目名稱/settings.py"文件中定義了關(guān)于模板的配置。
DIRS定義一個(gè)目錄列表,模板引擎按列表順序搜索這些目錄以查找模板文件,通常是在項(xiàng)目的根目錄下創(chuàng)建templates目錄。
3.模板文件的使用
-
通常是在視圖函數(shù)中使用模板產(chǎn)生html內(nèi)容返回給客戶端。
-
a)加載模板文件 loader.get_template
-
獲取模板文件的內(nèi)容,產(chǎn)生一個(gè)模板對象。
-
b)定義模板上下文 RequeseContext
-
給模板文件傳遞數(shù)據(jù)。
-
c)模板渲染產(chǎn)生html頁面內(nèi)容 render
-
用傳遞的數(shù)據(jù)替換相應(yīng)的變量,產(chǎn)生一個(gè)替換后的標(biāo)準(zhǔn)的html內(nèi)容。
4.Django處理模板分為兩個(gè)階段:
- 1.加載:根據(jù)給定的路徑找到模板文件,編譯后放在內(nèi)存中。
- 2.渲染:使用上下文數(shù)據(jù)對模板插值并返回生成的字符串。
為了減少開發(fā)人員重復(fù)編寫加載、渲染的代碼,Django提供了簡寫函數(shù)render,用于調(diào)用模板。
5.模板文件加載順序
- 1)首先去配置的模板目錄下面去找模板文件。
- 在去INSTALLED_APPS下面的每個(gè)應(yīng)用的templates去找模板文件,前提是應(yīng)用中必須有templates文件夾。
6.創(chuàng)建示例項(xiàng)目
1)創(chuàng)建項(xiàng)目test4。
django-admin startproject test4
2)進(jìn)入項(xiàng)目目錄test4,創(chuàng)建應(yīng)用booktest。
3)在test4/settings.py中INSTALLED_APPS項(xiàng)安裝應(yīng)用。
4)在test4/settings.py中DATABASES項(xiàng)配置使用MySQL數(shù)據(jù)庫test2,數(shù)據(jù)庫在第二部分已經(jīng)創(chuàng)建。
5)在test4/settings.py中TEMPLATES項(xiàng)配置模板查找路徑
6)創(chuàng)建模板目錄結(jié)構(gòu)如下
7)打開test4/urls.py文件,包含booktest的url配置。
8)在booktest/目錄下創(chuàng)建urls.py,配置url。
9)打開booktest/views.py文件,定義視圖index。
from django.shortcuts import renderdef index(request):return render(request,'booktest/index.html')10)在templates/booktest目錄下創(chuàng)建文件index.html,代碼如下:
<html> <head><title>首頁</title> </head> <body></body> </html>11)打開booktest/models.py文件,定義模型類BookInfo,結(jié)構(gòu)參照第二部分設(shè)計(jì)。
from django.db import modelsclass BookInfo(models.Model):btitle = models.CharField(max_length=20)bpub_date = models.DateField()bread = models.IntegerField(default=0)bcommet = models.IntegerField(default=0)isDelete = models.BooleanField(default=False)二、模板語言
模板語言包括4種類型,分別是:
變量
標(biāo)簽
過濾器
注釋
1.模板變量
模板變量的作用是計(jì)算并輸出,變量名必須由字母、數(shù)字、下劃線(不能以下劃線開頭)和點(diǎn)組成。
- 語法如下:
- 當(dāng)模版引擎遇到點(diǎn)如book.title,會(huì)按照下列順序解析:
- 1)首先把book當(dāng)成一個(gè)字典,把btitle當(dāng)成鍵名,進(jìn)行取值book[‘btitle’]
- 2)把book當(dāng)成一個(gè)對象,把btitle當(dāng)成屬性,進(jìn)行取值book.btitle
- 3)把book當(dāng)成一個(gè)對象,把btitle當(dāng)成對象的方法,進(jìn)行取值book.btitle
- 1)首先把book當(dāng)成一個(gè)字典,把0當(dāng)成鍵名,進(jìn)行取值book[0]
- 2)把book當(dāng)成一個(gè)列表,把0當(dāng)成下標(biāo),進(jìn)行取值book[0]
如果解析失敗,則產(chǎn)生內(nèi)容時(shí)用空字符串填充模板變量。
使用模板變量時(shí),.前面的可能是一個(gè)字典,可能是一個(gè)對象,還可能是一個(gè)列表。
如果變量不存在則插入空字符串‘’。
在模板中調(diào)用方法時(shí)不能傳遞參數(shù)。
- 示例
1)打開booktest/views.py文件,創(chuàng)建視圖temp_var。
def temp_var(request):dict={'title':'字典鍵值'}book=BookInfo()book.btitle='對象屬性'context={'dict':dict,'book':book}return render(request,'booktest/temp_var.html',context)2)打開booktest/urls.py文件,配置url。
url(r'^temp_var/$', views.temp_var),3)修改在templates/booktest下創(chuàng)建temp_var.html。
<html> <head><title>模板變量</title> </head> <body> 模板變量:<br/> {{dict.title}}<br/> {{book.btitle}}<br/> </body> </html>4)運(yùn)行服務(wù)器,在瀏覽器中輸入如下網(wǎng)址。
http://127.0.0.1:8000/temp_var/5)瀏覽效果如下圖
2.標(biāo)簽
- 語法如下:
- for標(biāo)簽語法如下:
- 循環(huán)邏輯
- if標(biāo)簽語法如下:
注意:運(yùn)算符左右兩側(cè)不能緊挨變量或常量,必須有空格。
== != < > <= >=- 布爾運(yùn)算符如下:
- 示例
1)打開booktest/views.py文件,創(chuàng)建視圖temp_tag。
from booktest.models import BookInfo def temp_tags(request):context={'list':BookInfo.objects.all()}return render(request,'booktest/temp_tag.html',context)2)打開booktest/urls.py文件,配置url。
url(r'^temp_tag/$', views.temp_tags),3)在templates/booktest下創(chuàng)建temp_tag.html。
<html> <head><title>標(biāo)簽</title> </head> <body> 圖書列表如下: <ul>{%for book in list%}{%if book.id <= 2%}<li style="background-color: red;">{{book.btitle}}</li>{%elif book.id <= 3%}<li style="background-color: blue;">{{book.btitle}}</li>{%else%}<li style="background-color: green;">{{book.btitle}}</li>{%endif%}{%empty%}<li>對不起,沒有圖書</li>{%endfor%} </ul> </body> </html>4)運(yùn)行服務(wù)器,在瀏覽器中輸入如下網(wǎng)址。
http://127.0.0.1:8000/temp_tag/瀏覽效果如下圖:
3.過濾器
- 語法如下:
- 使用管道符號|來應(yīng)用過濾器,用于進(jìn)行計(jì)算、轉(zhuǎn)換操作,可以使用在變量、標(biāo)簽中。
- 如果過濾器需要參數(shù),則使用冒號:傳遞參數(shù)。
- 長度length,返回字符串包含字符的個(gè)數(shù),或列表、元組、字典的元素個(gè)數(shù)。
- 默認(rèn)值default,如果變量不存在時(shí)則返回默認(rèn)值。
- 日期date,用于對日期類型的值進(jìn)行字符串格式化,常用的格式化字符如下:
Y表示年,格式為4位,
y表示兩位的年。
m表示月,格式為01,02,12等。
d表示日, 格式為01,02等。
j表示日,格式為1,2等。
H表示時(shí),24進(jìn)制,
h表示12進(jìn)制的時(shí)。
i表示分,為0-59。
s表示秒,為0-59。
value|date:“Y年m月j日
H時(shí)i分s秒”
- 示例
1)打開booktest/views.py文件,創(chuàng)建視圖temp_filter。
def temp_filter(request):context={'list':BookInfo.objects.all()}return render(request,'booktest/temp_filter.html',context)2)打開booktest/urls.py文件,配置url。
url(r'^temp_filter/$', views.temp_filter),3)在templates/booktest下創(chuàng)建temp_filter.html。
<head><title>過濾器</title> </head> <body> 圖書列表如下: <ul>{%for book in list%}{%if book.btitle|length > 4%}<li style="background-color: red;">{{book.btitle}}---默認(rèn)時(shí)間格式為:{{book.bpub_date}}</li>{%else%}<li style="background-color: green;">{{book.btitle}}---格式化時(shí)間為:{{book.bpub_date|date:"Y-m-j"}}</li>{%endif%}{%endfor%} </ul> </body> </html>4)運(yùn)行服務(wù)器,在瀏覽器中輸入如下網(wǎng)址。
http://127.0.0.1:8000/temp_filter/瀏覽效果如下圖:
4.自定義過濾器
- 自定義的過濾器函數(shù),至少有一個(gè)參數(shù),最多兩個(gè)
過濾器就是python中的函數(shù),注冊后就可以在模板中當(dāng)作過濾器使用,下面以求余為例開發(fā)一個(gè)自定義過濾器mod。
- 示例
1)在應(yīng)用中創(chuàng)建templatetags目錄,當(dāng)前示例為"booktest/templatetags",創(chuàng)建_init_文件,內(nèi)容為空。
2)在"booktest/templatetags"目錄下創(chuàng)建filters.py文件,代碼如下:
3)在templates/booktest/temp_filter.html中,使用自定義過濾器。
- 首先使用load標(biāo)簽引入模塊。
- 在遍歷時(shí)根據(jù)編號判斷奇偶,代碼改為如下:
4)運(yùn)行服務(wù)器,瀏覽效果如下:
過濾器可以接收參數(shù),將booktest/templatetags/filters.py中增加mod_num函數(shù)。
5)在templates/booktest/temp_filter.html中修改遍歷時(shí)判斷代碼。
6)運(yùn)行服務(wù)器,瀏覽效果如下:
5.注釋
在模板中使用如下模板注釋,這段代碼不會(huì)被編譯,不會(huì)輸出到客戶端;html注釋只能注釋html內(nèi)容,不能注釋模板語言。
- 1)單行注釋語法如下:
注釋可以包含任何模版代碼,有效的或者無效的都可以。
{# { % if foo % }bar{ % else % } #}- 2)多行注釋使用comment標(biāo)簽,語法如下:
總結(jié)
以上是生活随笔為你收集整理的Django模版(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django视图(三)
- 下一篇: Django模版(二)