一、視圖

  (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 }} 實現。