Django之路由分發和反向解析
阿新 • • 發佈:2019-04-16
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之路由分發和反向解析