Django框架實(shí)現(xiàn)逆向解析url的方法
本文實(shí)例講述了Django框架實(shí)現(xiàn)逆向解析url的方法。分享給大家供大家參考,具體如下:
Django中提供了一個(gè)關(guān)于URL的映射的解決方案,你可以做兩個(gè)方向的使用:
①. 有客戶端的瀏覽器發(fā)起一個(gè)url請(qǐng)求,Django根據(jù)URL解析,把url中的參數(shù)捕獲,調(diào)用相應(yīng)的試圖,獲取相應(yīng)的數(shù)據(jù),然后返回給客戶端顯示
②. 通過一個(gè)視圖的名字,再加上一些參數(shù)和值,逆向獲取相應(yīng)的URL
第一個(gè)就是平常的請(qǐng)求有URLconf來解析的過程,
第二個(gè)叫做,url的逆向解析,url逆向匹配,url的逆向查閱,等
Django提供了不同的層級(jí)的url逆向處理工具:
①. 在模板templates中,使用url標(biāo)記,如:{% url %}
②. 在Python代碼中,使用django.core.urlresolvers.reverse()方法
③. 在更高一層級(jí)的處理url中,用get_absolute_url()方法
示例
看如下的URLconf:
from django.conf.urls import patterns, url
urlpatterns = patterns('',
#...
url(r'^articles/(\d{4})/$', 'news.views.year_archive'),
#...
)
根據(jù)設(shè)計(jì),這個(gè)url的目的是將是nnnn年的文章存檔(archive),即/articles/nnnn/
1.在模板中,可以這樣來使用:
<a href="{% url 'news.views.year_archive' 2012 %}" rel="external nofollow" >2012 Archive</a>
{# Or with the year in a template context variable: #}
<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news.views.year_archive' yearvar %}" rel="external nofollow" >{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
解釋一下:首先,根據(jù)視圖 'news.views.year_artichive'可以定位到指定的URLconf中,然后后面的2012來填充articles/\d{4}
最終的結(jié)果為:
<a href="articles/2012/" rel="external nofollow" >2012 Archive</a>
這里就是根據(jù)試圖和所提供的值來逆向查詢url
下面的類似,
2.在python代碼中
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
def redirect_to_year(request):
# ...
year = 2006
# ...
return HttpResponseRedirect(reverse('news.views.year_archive', args=(year,)))
解釋一下:首先,必須引入django.core.urlresolvers.reverse() 方法,然后原理就是,根據(jù)提供的試圖和參數(shù)
的值來逆向查找URLconf,匹配相應(yīng)的url然后把值拿回來,最后,reverse()返回的值為:articles/2006/,這樣就逆向的查出了需要的url
希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
部署django項(xiàng)目安裝uwsgi出錯(cuò)的解決方法總結(jié)
uwsgi協(xié)議是一個(gè)uWSGI服務(wù)器自有的協(xié)議,它用于定義傳輸信息的類型(type of information),每一個(gè)uwsgi packet前4byte為傳輸信息類型描述,它與WSGI相比是兩樣?xùn)|西,下面這篇文章主要給大家介紹了關(guān)于部署django項(xiàng)目安裝uwsgi出錯(cuò)的解決方法,需要的朋友可以參考下2022-08-08
Python pickle類庫介紹(對(duì)象序列化和反序列化)
這篇文章主要介紹了Python pickle類庫介紹(對(duì)象序列化和反序列化),本文講解了pickle庫的作用、pickle的運(yùn)行過程、使用實(shí)例、修改picklable類型的默認(rèn)行為等內(nèi)容,需要的朋友可以參考下2014-11-11
python目標(biāo)檢測非極大抑制NMS與Soft-NMS
這篇文章主要weidajia?介紹了python目標(biāo)檢測非極大抑制NMS與Soft-NMS實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
基于Python實(shí)現(xiàn)一個(gè)自動(dòng)關(guān)機(jī)程序并打包成exe文件
這篇文章主要介紹了通過Python創(chuàng)建一個(gè)可以自動(dòng)關(guān)機(jī)的小程序,并打包成exe文件。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的同學(xué)可以了解一下2021-12-12
簡單了解Python write writelines區(qū)別
這篇文章主要介紹了簡單了解Python write writelines區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02

