避免代碼重複 , 定義共同方法, 自定義過濾器後 , 方便其餘視圖函數直接使用 , render調用html
被關聯的表叫主表 , 關聯表叫從表 , 刪除主表內容 , 從表內容也會被刪除 , 反之不能夠django
將True 改爲 False , 就是隻創建關係不創建約束 , 由於創建約束會致使想刪除某個表的字段會不讓刪除, 可是隻創建關係不創建約束 , 能夠直接刪除 , 這樣既能使用Django的查詢接口瀏覽器
文件夾放置在某個app 文件夾下 , 不須要settings中設置 服務器
若是 全局沒有, 則按照 INSTALLED_APPS 中 app 應用的順序 ,依次去每一個app中尋找 templates , 先找到就用app
若是全局沒有,則按照 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 , 最終將值渲染到頁面中
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 渲染後的結果在上述頁面中顯示