過濾器查漏補缺

自定義和默認標籤存在的意義:  爲什麼不在視圖中直接求出來在渲染模板

避免代碼重複 , 定義共同方法, 自定義過濾器後 , 方便其餘視圖函數直接使用 , render調用html

級聯刪除 :  一對一 , 一對多 / 多對多

被關聯的表叫主表 , 關聯表叫從表 , 刪除主表內容 , 從表內容也會被刪除 , 反之不能夠django

表的數據約束  db_constraint = True   默認創建約束

將True 改爲 False , 就是隻創建關係不創建約束 , 由於創建約束會致使想刪除某個表的字段會不讓刪除,  可是隻創建關係不創建約束  , 能夠直接刪除 ,  這樣既能使用Django的查詢接口瀏覽器

 

startapp 應用名 

文件夾放置在某個app 文件夾下 , 不須要settings中設置 服務器

templates  模塊 :   應用時 , 優先從全局尋找 

   若是 全局沒有, 則按照 INSTALLED_APPS 中 app 應用的順序 ,依次去每一個app中尋找 templates , 先找到就用app

 

templatestags  過濾器 :  應用時 , 優先去全局尋找 ,

  若是全局沒有,則按照 INSTALLED_APPS 中 app項目順序 依次去每一個app項目的  templatestags 文件夾尋找 ,最後找到的會覆蓋以前 函數

 

PS : 前提是那些模塊和過濾器名字都相同 ,就按照上面的規則應用 url

 

自定義過濾器

1, 看對應的setting中的INSTALLED_APPS 中是否當前APP項目 ,spa

2, 加一個包 , 包的名 必須爲 templetetagescode

3, from django . template import Librarghtm

  register = Library()   實例化 

@ register.filter                        @register.simple_tag( 標籤過濾器)

例如 : 

def func(x,y)
    return x*y

#  此函數加上@register.filter爲 自定義乘法過濾器



頁面中  {% load 包下的py文件名%}
            {{a|func:c}}   傳兩個值   最多隻能穿兩個值


{% mul 2 4 %}   這種能夠穿多個值, 

 

以上過濾器的使用流程,即在何時被調用

1 , 瀏覽器發送請求

2 , 服務器收到請求 , 開始分發url 

3 , 進入對飲的視圖函數

4 , 函數render 一個頁面 , 並解析頁面模板中的模板語法       {{   ....   }}    {%  ....  %}    {%  load  文件名  %}

5 , 當發現{%  load ...  %}  就會去 templatetags  中尋找對應過濾器 , 並用返回值替換對應的  {%  .....  %}

6 , 最終將值渲染到頁面中

 

templatetags 的進階  --------includetags

 cal.py 

register.inclusion_tag("/menu.html")

 def get_menu_data():

  menu_list = [1,2,3]

  return {"menu_list ":menu_list }

menu.html 

{% for foo in menu_list%}

  <li> {{foo}} </li>

{%endfor%}

當在別的 頁面中調用  {% load  cal %}

          {% get_menu_data %}

  會直接將 menu.html 渲染後的結果在上述頁面中顯示 

相關文章
相關標籤/搜索