變數的使用: def test(request): num=1 s='hello' li=[1,2,['a','b']] dic={'name':'w','age':1} se={1,2,3} tup=(1,2,3,4) def my_test(): return '這是my_test' class ...
變數的使用:
def test(request): num=1 s='hello' li=[1,2,['a','b']] dic={'name':'w','age':1} se={1,2,3} tup=(1,2,3,4) def my_test(): return '這是my_test' class test1: def __init__(self,name): self.name=name @classmethod def classM(cls): return '這是類方法' @staticmethod def staM(): return '這是staticmethod方法' def get_name(self): return self.name t=test1('wdj') return render(request,'test.html',locals())
在views中定義上面的函數,locals()是將命名空間中所有變數全部傳入前端
上圖傳入的變數有:整型,字元串,列表,字典,集合,元組,無參函數,類的對象
在前端的使用方式:
<p>數字:{{ num }}</p> <p>字元串:{{ s }}</p> <p>列表:{{ li }}</p> <p>字典:{{ dic }}</p> <p>集合{{ se }}</p> <p>元組:{{tup }}</p> <p>函數:{{my_test}}</p> <P>對象:{{ t }}</P> <P>對象屬性{{ t.name }}</P> <P>對象函數{{ t.get_name }}</P> <P>類函數{{ t.classM }}</P> <P>全局函數{{ t.staM }}</P>
模板中支持的寫法:
{# 取l中的第一個參數 #}{{ l.0 }}
{# 取字典中key的值 #} {{ d.name }} {# 取對象的name屬性 #} {{ person_list.0.name }} {# .操作只能調用不帶參數的方法 #} {{ person_list.0.dream }}
註意:傳進來的函數一定不能是含參函數
Filter(過濾器):
語法: {{ value|filter_name:參數 }}
'|'左右沒有空格沒有空格沒有空格
過濾器會把左邊的值當做第一個參數傳遞給後面的過濾器,過濾器後面的值會當做第二個參數傳遞給過濾器
常用過濾器:
1.default
{{ value|default: "nothing"}}
如果value值沒傳的話就顯示nothing
2.length:{{ value|length }}
返回value的長度,如 value=['a', 'b', 'c', 'd']的話,就顯示4.
3.filesizeformat
將值格式化為一個 “人類可讀的” 文件尺寸 (例如 '13 KB'
, '4.1 MB'
, '102 bytes'
, 等等)。例如:
{{ value|filesizeformat }}
如果 value 是 123456789,輸出將會是 117.7 MB。
4.slice
切片
{{value|slice:"1:3"}}
從索引為1切到索引為3,不保留3,前閉後開,後面的參數可以為負數
5.date
格式化
{{ value|date:"Y-m-d H:i:s"}}
6.safe
Django的模板中會對HTML標簽和JS等語法標簽進行自動轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個內容管理系統,後臺添加的文章中是經過修飾的,這些修飾可能是通過一個類似於FCKeditor編輯加註了HTML修飾符的文本,如果自動轉義的話顯示的就是保護HTML標簽的源文件。為了在Django中關閉HTML的自動轉義有兩種方式,如果是一個單獨的變數我們可以通過過濾器“|safe”的方式告訴Django這段代碼是安全的不必轉義。
比如:
value = "<a href='#'>點我</a>"
{{ value|safe}}
7.truncatechars
如果字元串字元多於指定的字元數量,那麼會被截斷。截斷的字元串將以可翻譯的省略號序列(“...”)結尾。
參數:截斷的字元數
{{ value|truncatechars:9}}
其中...算3個字元位置
8.truncatewords
和truncatechars不同,這是按照空格的數量截斷的,同樣的。截斷的字元串將以可翻譯的省略號序列(“...”)結尾。
參數:截斷的字元數
{{ value|truncatewords:3}}
其中...不算3個字元位置必須做下麵三件事: 1.必須在應用下新建一個名為templatetags的文件夾 2.在該文件夾下創建一個任意名的py文件 3.在該文件內必須先寫下麵兩句話 from django import template register=template.Library() 定義過濾器: @register.filter(name='baby') def my_sum(a,b) return a+b 自定義標簽: @register.sumple_tag(name='plus') def plus(a,b,c): return '%s-%s-%s' 使用方法:
自定義過濾器:
{% load my_tags %}
{{ num|baby:2 }}
{% s_tag 'w' 'a' 'd' %}
{{}}變數相關
{%%}邏輯相關
註意:自定義的過濾器可以在if和for中使用,但是自定義的標簽不能使用
自定義inclusion_tag:
調用自定義的inclusion_tag能夠返回一段html代碼、
比如form表單,表格,列表
通常用於動態生成的HTML頁面
自定義inclusion_tag
@register.inclusion_tag('login.html')
def get_html(n):
l=[]
for i in range(n):
i.append('第%項'%i)
return {'l':l}
模板的繼承和導入:
在模板中指定一片區域命名為content
{% extends 'home.html'%} 引用home頁面
{% block content%}
{%endblock%}
調用主頁面的代碼: