一、視圖
(1)請求對象之request
django里將瀏覽器端傳來的請求消息封裝成request,在views里可以調用。
request.method: 顯示的是GET還是POST請求。默認瀏覽器地址欄輸入的都是GET請求。
request.path:獲取url除去參數數據部分的路徑
request.get_full_path():將url包括參數數據的路徑全部獲取
還有一些其他方法等。is_ajax():判斷是否為ajax請求
(2)響應對象
通過Httpresponse返回指定內容
通過 render()方法 return render(reques,‘index.html’)來返回一個頁面,其本質實在Httpresponse上做了一些操作封裝成render。
其中render方法還有第三個參數render(reques,‘index.html’,{“fun_name”:var_method})
這是用了模板的方法,在html頁面中使用{{fun_name}},然后django就會把定義的方法變量傳給html頁面來返回給瀏覽器解析。其中fun_name為html中
{{}}的方法名,var_method為views函數內對應的變量名。
二、模板
模板文件存在template下,指的是html文件,但是其中有模板語法。
語法有兩個:
(1):{{}}--變量
views和html配置:
其中locals方法是顯示本地所有的變量
def def_path(request,):
i = 10
j = [1,2,3]
k = {"name":'test1',"age":2}
o1 = object
t = True
return render(request,'index.html',locals())
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> test <p>{{i}}</p> <p>{{j}}</p> <p>{{k}}</p> <p>{{o1}}</p> <p>{{t}}</p> <p>{{k.name}}</p> </body> </html>
在瀏覽器上的顯示:

深度查詢:指的是在html中 <p>{{k.name}}</p>這樣的類似于python取值,瀏覽器來查看views下函數定義的方法變量內容。
過濾器:模板中自帶的一些過濾方法。格式:{{var_name|xx:"xxxx"}},var_name對應的是views函數下的變量名。
1:default {{value|default:'nothing'}} 默認值設置為空
2:date {{value|date:"Y-m-d"}} 格式化日期
3:length {{value|length}} 返回值的長度
4:filesizeformat {{value|filesizeformat}} 將返回值格式化為一個文件尺寸
5:slice {{value|length}} 字符串切片
6:truncatechars(truncatewords) {{value|truncatechars:9}} 用來截斷數據,默認包含結尾的三個點,因此實際看的數量少三個。
truncatewords和truncatechars不同之處在于,words以單詞來截斷,chars以字符來截斷。
7:safe {{linke|safe}} django自帶一種機制,當服務器響應瀏覽器提交一些<>文本內容執行時,如果不轉譯,那么到時候瀏覽器直接當做命令執行導致錯誤。因此
使用safe告訴處理程序不用轉譯。
(2){% %}--標簽
1:for標簽
格式:
{% for i in l %} <p>{{i}}</p>
<p>{{key}}:{{val}}</p>
{% endfor %}
循環遍歷列表、字典等
如果要在循環的東西前面加上序數,則使用forloop.counter0(forloop.counter),從0開始或者從1開始
forloop.revcounter則表示反序列計數。
還有for empty組合,表示當列表為空時,可以打印顯示為空,不然頁面上無法得知是空還是有問題。
{% for i in l %} <p>{{i}}</p> <p>{{key}}:{{val}}</p> {% empty %} <p> is empty</p> {% endfor %}
2:if標簽
{% if user %} <p> <a href =''> hi {{user}}</a> </p> {% else %} <p> <a href =''>登錄</a> </p> {% endif %}
通過user的值來選擇顯示什么樣的標簽
3:with標簽
類似于python with as,起個別名,縮寫方便編寫
{% with i as n}
{{n}}}
{% endwith %}
4:csrf_token
用于跨站請求偽造保護。在django的settings下的 MIDDLEWARE配置上,有csrf保護,默認使用POST會forbidden,,那么就要使用這個標簽來通過。
{% csrf_token %}
使用這個標簽會默認產生一個<input type='hidden' name=‘xx’ value=‘xxx’>,里邊值會隨機變動。
(3)自定義過濾器和標簽
1:自定義過濾器
首先在settings的INSTALLED_APPS配置當面的應用
然后在應用中創建templatetags(固定的名字)模塊
創建py文件,設置自定義過濾器
from django import template
register=template.Library()
@register.filter
def filter_test(x,y):
return x*y
在html文件中設置:
{% load filter_test %}
<p>{{i|filter_test:20}}</p>
2:自定義標簽
和自定義過濾器基本一致,只是在html中調用時:
{% load filter_test %} <p>{% filter_test 10 20 %}</p>
但是過濾器只能2個參數,標簽參數數量則不固定。
不過過濾器可以和if聯合靈活應用,標簽則不可以,各有優缺點。
(4)繼承
1:include
{% include 'part1.html' %}
主要作用是新建html時可以調用以前設計好的html,實現一種插入功能。
2: block
{% extends %} 必須放在第一行
{% block name %}
......
{% endblock %}
通過extends繼承框架樣式,然后再通過block添加自己的內容樣式
要注意的是在父html頁面中也要寫上子頁面需要自己設置的地方,例如:
<div> {% block name %} {% endblock %} </div>
這樣子頁面便可以繼承父頁面的樣式,并且還可以在父頁面指定的地方設置自定義樣式。
最后block也可以繼承父頁面block里邊的東西,用{{ block.super }} 實現。
浙公網安備 33010602011771號