日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django模版(一)

發(fā)布時(shí)間:2024/4/11 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django模版(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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。

cd test4 python manage.py startapp 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。

from django.conf.urls import url from booktest import views urlpatterns=[url(r'^$',views.index), ]

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ì)按照下列順序解析:
例如:{{ book.btitle }}
  • 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
例如:{{book.0}}
  • 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)簽語法如下:
{%for item in 列表%}
  • 循環(huán)邏輯
{{forloop.counter}}表示當(dāng)前是第幾次循環(huán),從1開始 {%empty%} 列表為空或不存在時(shí)執(zhí)行此邏輯 {%endfor%}
  • if標(biāo)簽語法如下:
{%if ...%} 邏輯1 {%elif ...%} 邏輯2 {%else%} 邏輯3 {%endif%} 比較運(yùn)算符如下:

注意:運(yùn)算符左右兩側(cè)不能緊挨變量或常量,必須有空格。

== != < > <= >=
  • 布爾運(yùn)算符如下:
and or not
  • 示例

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ù)。
變量|過濾器:參數(shù)
  • 長度length,返回字符串包含字符的個(gè)數(shù),或列表、元組、字典的元素個(gè)數(shù)。
  • 默認(rèn)值default,如果變量不存在時(shí)則返回默認(rèn)值。
data|default:'默認(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文件,代碼如下:

#導(dǎo)入Library類 from django.template import Library#創(chuàng)建一個(gè)Library類對象 register=Library()#使用裝飾器進(jìn)行注冊 @register.filter #定義求余函數(shù)mod,將value對2求余 def mod(value):return value%2 == 0

3)在templates/booktest/temp_filter.html中,使用自定義過濾器。

  • 首先使用load標(biāo)簽引入模塊。
{%load filters%}
  • 在遍歷時(shí)根據(jù)編號判斷奇偶,代碼改為如下:

    4)運(yùn)行服務(wù)器,瀏覽效果如下:

    過濾器可以接收參數(shù),將booktest/templatetags/filters.py中增加mod_num函數(shù)。
#使用裝飾器進(jìn)行注冊 @register.filter #定義求余函數(shù)mod_num,將value對num求余 def mod_num(value,num):return value%num

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)簽,語法如下:
{%comment%} ... {%endcomment%}

總結(jié)

以上是生活随笔為你收集整理的Django模版(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。