1. 程式人生 > >django url分發,視圖,模板回顧

django url分發,視圖,模板回顧

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分發,視圖,模板回顧