django url分發,視圖,模板回顧
阿新 • • 發佈:2019-01-22
clu 模板 定義 div ron 原生 分組 files 模板繼承
Django基礎輪廓
MTV+controller
一 url分發系統:
1 簡單使用
url(r‘^articles/2003/$‘, views.special_case_2003), # special_case_2003(request) url(r‘^articles/(\d{4})/$‘, views.year_archive), # year_archive(request,1999) url(r‘^articles/(\d{4})/(\d+)$‘, views.month_archive), # month_archive(request,1999,12)
2 有名分組
url(r‘^articles/(?P<y>\d{4})/(?P<m>\d+)$‘, views.month_archive2),
# month_archive(request,y=1999,m=12)
3 分發include
url(‘app/‘, include(‘app.urls‘)),
4 反向解析
(1)在模板: {% url ‘別名‘ %} (2)在py文件中: _url=reverse("index")
二、視圖函數
瀏覽器 ---------- 服務器‘‘‘ 請求首行 請求頭 空格 請求體(post) # user=yuan&pwd=123 ‘‘‘
1、請求對象request
# request;請求信息對象 print(request.method) print(request.path) print(request.GET) print(request.POST) # {"user":"yuan","pwd":123}print(request.body) # 請求體原生數據 " user=yuan&pwd=123" print(request.META) print(request.get_full_path()) #路徑+請求數據 print(request.is_ajax())
2、響應對象
1 Httpresponse("OK") 2 render(request,"index.html") (1) 找文件,讀文件 (2) 渲染文件:將模板文件中的所有{{}},{%%}替換成標簽 3 重定向 redirect (1)瀏覽器發送一個post請求; (2)請求通過了,服務器發送一個301或者302狀態碼和location:新路徑給瀏覽器; (3)接收到301或者302狀態碼,解讀響應體中的location的值,攜帶此路徑再一次訪問服務器; (4)服務器再一次接受到路徑,將路徑對應的數據打包好,傳送給瀏覽器渲染。
三、模板語法
1 渲染變量 {{val}}
(1) 深度查詢 {{val.}} (2) 過濾器 {{val|filter_name:參數}} {{now|date:"Y-m-d"}} 常用過濾器: add date default lenth slice safe filesizeformat
2 渲染標簽 {%%}
{%for i in val%} {%endfor%} {%if %} {%endif%} {%csrftoken%}
3、自定義標簽和過濾器
1、在settings中的INSTALLED_APPS配置當前app; 2、在app中創建templatetags模塊; 3、創建任意 .py 文件,如:my_tags.py; 4、編寫代碼
from django import template from django.utils.safestring import mark_safe register = template.Library() #register的名字是固定的,不可改變 @register.filter def filter_multi(v1,v2): return v1 * v2 @register.simple_tag def simple_tag_multi(v1,v2): return v1 * v2乘法標簽和過濾器
5、使用的時候導入自定義模板和標簽文件
{
%
load 文件名
%
}
6、使用simple_tag和filter(如何調用)
{{num|filter_multi:
2
}}
#24 其中num=12
4、模板繼承
1、創建母版base.html;
2、base.html中在設置
{% block content %}
設置盒子
{% endblock %}
3、子.html文件中
{% extends "base.html" %} //繼承母板結構 {% block content %} 此處寫自己的html代碼 {% endblock %}
5 自定義模板升級 inclusion_tag
rbacmenu.py (模板文件)
from django import template register = template.Library() # register的名字是固定的,不可改變 @register.inclusion_tag(‘rbac/menu.html‘) #指定傳遞給傳遞給 rbac/menu.html文件 def get_menu(request): # 權限側邊欄 permission_list = request.session[‘permissions_list‘] per_list = [] for permission in permission_list: if permission.get(‘type‘) == "menu": per_list.append(permission) return {"per_list":per_list}
rbac/menu.html 代碼
{% for permission in per_list %} <div><a href="{{ permission.url}}">{{ permission.title }}</a></div> {% endfor %}
調用方法
<div class="left-menu"> {% block side_bar %} {% load rbacmenu %} {% get_menu request %} //此處調用,並傳遞參數request {% endblock side_bar %} </div>
django url分發,視圖,模板回顧