Django之逆向解析url

Django中提供了一個關於URL的映射的解決方案,你可以做兩個方向的使用:

            1.有客戶端的瀏覽器發起一個url請求,Django根據URL解析,把url中的參數捕獲,調用相應的試圖,

                獲取相應的數據,然後返回給客戶端顯示

             2.通過一個視圖的名字,再加上一些參數和值,逆向獲取相應的URL

第一個就是平常的請求有URLconf來解析的過程,第二個叫做,url的逆向解析,url逆向匹配,url的逆向查閱,等

Django提供了不同的層級的url逆向處理工具:

             1.在模板templates中,使用url標記,如:{% url %}

             2.在Python代碼中,使用django.core.urlresolvers.reverse()方法

             3.在更高一層級的處理url中,用get_absolute_url()方法

例子如下:

看如下的URLconf:

from django.conf.urls import patterns, url

urlpatterns = patterns('',
    #...
    url(r'^articles/(\d{4})/$', 'news.views.year_archive'),
    #...
)
根據設計,這個url的目的是將是nnnn年的文章存檔(archive),即/articles/nnnn/

1.在模板中,可以這樣來使用:

<a href="{% url 'news.views.year_archive' 2012 %}">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 %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
解釋一下:首先,根據視圖 'news.views.year_artichive'可以定位到指定的URLconf中,然後後面的2012來填充articles/\d{4}

最終的結果爲<a href="articles/2012/">2012 Archive</a>,這裏就是根據試圖和所提供的值來逆向查詢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() 方法,然後原理就是,根據提供的試圖和參數

的值來逆向查找URLconf,匹配相應的url然後把值拿回來,最後,reverse()返回的值爲:articles/2006/,這樣就逆向的查出了

需要的url



發佈了68 篇原創文章 · 獲贊 9 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章