Django模板系統

2021-09-19 05:47:51 字數 4330 閱讀 9761

官方文件

只需要記兩種特殊符號:

}和 變數相關的用},邏輯相關的用。

}變數名由字母數字和下劃線組成。

點(.)在模板語言中有特殊的含義,用來獲取物件的相應屬性值。

幾個例子:

view中**:

def template_test(request):

l = [11, 22, 33]

d =

class person(object):

def __init__(self, name, age):

self.name = name

self.age = age

def dream(self):

return "{} is dream...".format(self.name)

alex = person(name="alex", age=34)

egon = person(name="egon", age=9000)

eva_j = person(name="eva_j", age=18)

person_list = [alex, egon, eva_j]

return render(request, "template_test.html", )

模板中支援的寫法:

}}

}}

語法: }

default

}
如果value值沒傳的話就顯示nothing

length}

'|'左右沒有空格沒有空格沒有空格

返回value的長度,如 value=['a', 'b', 'c', 'd']的話,就顯示4.

filesizeformat

將值格式化為乙個 「人類可讀的」 檔案尺寸 (例如'13 kb','4.1 mb','102 bytes', 等等)。例如:

}
如果 value 是 123456789,輸出將會是 117.7 mb。

slice切片

}
date格式化

}
safedjango的模板中會對html標籤和js等語法標籤進行自動轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些html元素被轉義,比如我們做乙個內容管理系統,後台新增的文章中是經過修飾的,這些修飾可能是通過乙個類似於fckeditor編輯加註了html修飾符的文字,如果自動轉義的話顯示的就是保護html標籤的原始檔。為了在django中關閉html的自動轉義有兩種方式,如果是乙個單獨的變數我們可以通過過濾器「|safe」的方式告訴django這段**是安全的不必轉義。

比如:value = "點我"

}
如果字串字元多於指定的字元數量,那麼會被截斷。截斷的字串將以可翻譯的省略號序列(「...」)結尾。

引數:截斷的字元數

}
自定義過濾器只是帶有乙個或兩個引數的python函式:

例如,在過濾器}中,過濾器foo將傳遞變數var和引數「bar」

自定義filter**檔案擺放位置(名字必須是templatetags的包):

__init__.py

models.py

__init__.py

views.py

編寫自定義filter

from django import template

register = template.library()

@register.filter(name="cut")

def cut(value, arg):

return value.replace(arg, "")

@register.filter(name="addsb")

def add_sb(value):

return "{} sb".format(value)

使用自定義filter

for迴圈可用的一些引數:

variable

description

forloop.counter當前迴圈的索引值(從1開始)

forloop.counter0當前迴圈的索引值(從0開始)

forloop.revcounter當前迴圈的倒序索引值(從1開始)

forloop.revcounter0當前迴圈的倒序索引值(從0開始)

forloop.first當前迴圈是不是第一次迴圈(布林值)

forloop.last當前迴圈是不是最後一次迴圈(布林值)

forloop.parentloop本層迴圈的外層迴圈

for ... empty

if,elif和else

使用者人數:}

黑名單數:}

沒有使用者

當然也可以只有if和else

七座豪華suv

黃包車

if語句支援 and 、or、==、>、=、in、not in、is、is not判斷。

with

定義乙個中間變數

} employee}

這個標籤用於跨站請求偽造保護。

在頁面的form表單裡面寫上

1. django的模板語言不支援連續判斷,即不支援以下寫法:

...

2. django的模板語言中屬性的優先順序大於方法

def xx(request):

d =

return render(request, "xx.html", )

如上,我們在使用render方法渲染乙個頁面的時候,傳的字典d有乙個key是items並且還有預設的 d.items() 方法,此時在模板語言中:

}
缺省會取d的items key的值。

注意:我們通常會在母板中定義頁面專用的css塊和js塊,方便子頁面替換。在子頁面中在頁面最上方使用下面的語法來繼承母板。

通過在母板中使用來定義"塊"。

在子頁面中通過定義母板中的block名來對應替換母板中相應的內容。

世情薄

人情惡雨送黃昏花易落

可以將常用的頁面內容如導航條,頁尾資訊等元件儲存在單獨的檔案中,然後在需要使用的地方按如下語法匯入即可。

引用js檔案時使用:

某個檔案多處被用到可以存為乙個變數

或者

多用於返回html**片段,此法比較常用,裝飾器接收操作的動態html內容,

示例:templatetags/my_inclusion.py

from django import template

register = template.library()

@register.inclusion_tag('result.html')

def show_results(n):

n = 1 if n < 1 else int(n)

data = ["第{}項".format(i) for i in range(1, n+1)]

Django模板系統

如果在模板中需要解析變數使用 如果在模板中進行邏輯相關操作使用 注釋 單行注釋。在django的模板系統中變數使用的語法 當模版引擎遇到變數,就會用值替換掉變數。變數的命名可以是字母數字以及下劃線 的組合。變數名稱中不能有空格或標點符號。練習1 把html檔案中的 替換成 老王 html檔案 vie...

Django模板系統

匯入 template 和 context 類 from django.template import template,context def hello template request html 1.構建模板結構 template obj template html 2.建立渲染結構 cont...

Django 模板系統1(模板系統)

1 模板系統 template 向頁面中填充內容 1 模板系統常用符號 和 a 如果在模板中需要解析變數使用 b 如果在模板中進行邏輯相關操作使用 注釋 單行注釋 2 變數 在django 的模板系統中變數使用的語法 當模板引擎遇到變數,就會用值替換掉變數。變數的命名可以是字母數字以及下劃線 的組合...