1. 程式人生 > >Django之路由分發和反向解析

Django之路由分發和反向解析

pattern xxx pos display closed clu src spa 視圖

路由分發是指:總路由不再直接做路由與視圖函數的對應關系,而是將獲取的路由分發給下面的app去處理對應關系

技術分享圖片
from django.conf.urls import url,include
from app03 import urls as app03_urls
from app01 import urls as app01_urls
from app02 import urls as app02_urls
urlpatterns = [
    url(r^app03/,include(app03_urls)),
    url(r^app01/,include(app01_urls)),
    url(r
^app02/,include(app02_urls)) ]
技術分享圖片

首先導入include模塊,其次確保app下有urls文件,運行效果如下:

技術分享圖片

如果想訪問app01下的index頁面,只需要加上app01/index即可

同樣的app中也可以有views文件和templates文件夾,這樣每個app就是獨立的前後端程序

二.反向解析

試想一個場景,你有200多個a標簽,href都指向index/,有一天在urls裏面index改為了new_index,那麽你只能手動改變a標簽中的href,當你改完,又變成了my_index,那麽一天的時間都可能在改地址,那麽有沒有什麽方法,不再把程序寫死,

反向解析就是應用於此。

通過名字反向推導出頁面文件,類似於字典

無分組:

urlpatterns = [
  url(r^login/,views.login,name=login_name),
]

第一步指定name

在後端的使用:

首先導入reverse模塊

from django.shortcuts import reverse

其次在views的函數裏面:

def login(request):
    res=reverse(login_name)#login_name是在urls裏面定義的名字
    print
(res)

其中res的打印如下:

技術分享圖片

在前端的使用:

<a href="{%url ‘login_name‘%}">1111111111</a>

語法:{%url ‘ 名稱’%}

這樣的寫法就不會寫死了,無論怎麽改,只要名字不變,都可以導向該頁面

無名分組:

urlpatterns = [
  url(r‘^login/(\d+)‘,views.login,name=‘login_name‘),
]

views的函數:

def login(request,xxx):
    res=reverse(login_name,args=(xxx,))
    print(res)

打印一下res:

技術分享圖片

res=reverse(‘login_name‘,args=(xxx,)),其中的args=(xxx,),不是固定的,如果你喜歡寫個1也不會影響結果,
例如
res=reverse(‘login_name‘,args=(1,)),只要滿足匹配規則,都是可以隨意寫的

在前端的使用:

<a href="{%url ‘login_name‘ xxx%}">1111111111</a>

其中xxx是我在renderf中傳入的參數,可以動態的指定路徑,如果嫌棄麻煩,可以隨意寫個滿足正則的參數,我的正則是\d+,所以下面的也是可以的

技術分享圖片
<a href="{%url ‘login_name‘ 2333%}">1111111111</a>

技術分享圖片

語法:{%url ‘ 名稱’ 參數%},必須要有,不然不能匹配

有名分組:

urlpatterns = [
  url(r^login/(?P<year>\d+),views.login,name=login_name),
]

views的函數:

def login(request,year):
    res=reverse(login_name,kwargs={year:year})
    print(res)

打印一下res:

技術分享圖片

res=reverse(‘login_name‘,kwargs={‘year‘:year},其中的kwargs={‘year‘:year}同樣不是固定的,如果你喜歡寫個1也不會影響結果,
只要滿足匹配規則,都是可以隨意寫的

在前端的使用:



<a href="{%url ‘login_name‘ xxx%}">1111111111</a>

在前端使用是和無名分組一樣的

PS:在使用無名分組,有名分組的時候,前端一定要在定義的名字後面加上參數,不然不能匹配




 


Django之路由分發和反向解析