Django框架視圖層URL映射與反向解析實例分析
本文實例講述了Django框架視圖層URL映射與反向解析。分享給大家供大家參考,具體如下:
Django視圖層主要工作就是銜接HTTP請求、python程序、HTML模板。
URL分發(fā)(URL dispatcher)映射配置可以被看作Django項目的入口配置(項目下的urls.py以及應(yīng)用的下的urls.py,include將兩者聯(lián)系起來在項目下的urls.py),通過URLdispatcher可以指定用戶的每一個訪問的后臺的python處理函數(shù)是什么。
1.普通url映射
每一個Django都有一個urls.py來維護URL dispatcher,如下所示:
from django.conf.urls import url from . import views #導(dǎo)入視圖處理函數(shù) urlpatterns = [ url(r'^year/2015/$', views.moments_2015), url(r'^year/([0-9]{4}$)', views.years_moments), url(r'^month/([0-9]{4})/([0-9]{2}$)', views.month_moments), url(r'month/([0-9]{4})/([0-9]{2})/([0-9]+)$', views.test), ]
該文件通過維護urlpatterns列表的元素完成URL映射,每個元素都是django.conf.urls.url的一個實例,url的第一個參數(shù)是HTPP路徑,第二個是相應(yīng)的python函數(shù)名。
URL路徑用正則表達式表達,'^'起始符,'$'結(jié)束符,第一個路徑是嚴格路徑,只匹配'year/2015',調(diào)用是的views中moment_2015(request)函數(shù),request是用戶請求對象!
第二個路徑匹配的事任何'year/xxxx'路徑,其中xxxx代表是四個數(shù)字,調(diào)用views的year_moment(request,xxxx),并且會把四個數(shù)字當(dāng)成變量傳給該函數(shù)
第三個第四個與第二個類似,只不過后續(xù)添加了更多路徑變量調(diào)用函數(shù)分別為month_moments(request, xxxx, yy)和test(request,xxxx, yy, zz)
2.命名URL參數(shù)映射
命名URL參數(shù)映射使得開發(fā)者可以定義這些被傳遞參數(shù)的參數(shù)名稱,方式為"?P<name>pattern",如下所示:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^year/2015/$', views.moments_2015), url(r'^year/?P<year>([0-9]{4}$)', views.years_moments), url(r'^month/?P<year>([0-9]{4})/?P<month>([0-9]{2}$)', views.month_moments), ]
當(dāng)多個URL映射定義可以匹配同一個URL訪問,django會選取列表的第一個元素?。。。。。。。。?!
后兩個url使用命名參數(shù)進行定義,調(diào)用函數(shù)如下:
year_moments(request,year=xxxx)和month_moments(request,year=xxxx,month=xx)!
3.分布式URL映射
在django項目中,可能包含多個應(yīng)用,每個app都有自己urls.py,如果將所有的url映射都放在一個urls.py文件不利于維護。Django通過include()函數(shù)提供了分布式URL映射功能。
在項目根映射文件urls.py引用其他應(yīng)用的映射文件:
from django.conf.urls import url, include urlpatterns = [ url(r'^moments/', include('djangosite.app.urls')), url(r'^admin/', include('djangosite.admin.urls')), ]
以moment/開頭的URL被轉(zhuǎn)接到djangosite.app.urls.py文件
以admin/開頭的URL被轉(zhuǎn)接到djangosite.admin.urls.py文件
其中子映射文件app/urls.py:
from django.conf.urls import url, include from . import views urlpatterns = [ url(r'^year/?P<year>([0-9]{4})/$', views.year_moments), url(r'^admin/', include('djangosite.admin.urls')), ]
解析URL:
第一個對http://xxxxxxxxx/moments/year/2013的訪問會定位到app/views.py的year_moments函數(shù)
第二個元素對http://xxxxxx/moments/admin的訪問會轉(zhuǎn)接到djangosite.admin.urls.py文件進行解析
4.反向解析
django的反向解析共那個在模板文件和python視圖函數(shù) :
在模板文件中用{%url%}標簽調(diào)用反向解析;
在python視圖函數(shù)中用django.urls.reverse()函數(shù)。
from django.conf.urls import url, include urlpatterns = [ url(r'^year/2015/$', views.year_moments, name="moments_2015"), ]
定義一個URL映射,通過name參數(shù)將該映射命名為moments_2015.在需要獲取該URL的模板文件中{%url%}標簽來進行聲明:
<a href="{% url 'moments_2015'%}" rel="external nofollow" > 查看2015消息 </a>
上面用'moments_2015'映射名作為反向解析的參數(shù),解析結(jié)果為:
<a href="/year/2015/" rel="external nofollow" rel="external nofollow" > 查看2015消息 </a>
在視圖函數(shù)中調(diào)用方式是reverse函數(shù)。如下所示:
#views.py from django.urls import reverse from django.http import HTTPResponseRedirect def redirect_to_year_2015(request): return HTTPResponseRedirect(reverse('moments_2015'))
5.反向解析帶參數(shù)
模板文件如下所示:
from django.conf.urls import url, include urlpatterns = [ url(r'^year/?P<year>([0-9]{4})/$', views.year_moments, name="moments"), ]
模板文件通過{%url%}標簽調(diào)用反向解析:
<a href="{% url 'moments', 2015%}" rel="external nofollow" > 查看2015消息 </a>
上面用'moments_2015'映射名作為反向解析的參數(shù),解析結(jié)果為:
<a href="/year/2015/" rel="external nofollow" rel="external nofollow" > 查看2015消息 </a>
python視圖函數(shù)調(diào)用reverse進行反向解析:
#views.py from django.urls import reverse from django.http import HTTPResponseRedirect def redirect_to_year_2015(request): return HTTPResponseRedirect(reverse('moments', args=(2014,)))
args參數(shù)可以攜帶參數(shù)反向解析!
希望本文所述對大家基于Django框架的Python程序設(shè)計有所幫助。
相關(guān)文章
利用PyInstaller將python程序.py轉(zhuǎn)為.exe的方法詳解
這篇文章主要給大家介紹了利用PyInstaller將python程序.py轉(zhuǎn)為.exe的方法,文中介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-05-05GCN?圖神經(jīng)網(wǎng)絡(luò)使用詳解?可視化?Pytorch
這篇文章主要介紹了GCN?圖神經(jīng)網(wǎng)絡(luò)使用詳解?可視化?Pytorch,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12Django之form組件自動校驗數(shù)據(jù)實現(xiàn)
這篇文章主要介紹了Django之form組件自動校驗數(shù)據(jù)實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Python使用PyQt5/PySide2編寫一個極簡的音樂播放器功能
這篇文章主要介紹了Python中使用PyQt5/PySide2編寫一個極簡的音樂播放器功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02