Django學習筆記之Django的url反向解析

 

0x00 URL反向解析和三種不一樣的反向解析方式

Django中提供了關於URL的映射的解決方案,能夠作兩個方向的使用: django

1.普通解析過程:由客戶端的瀏覽器發起一個url請求,Django根據URL解析,把url中的參數捕獲,調用相應的視圖,獲取相應的數據,而後返回給客戶端顯示。
2.反向解析:經過一個視圖的名字,再加上一些參數和值,逆向獲取相應的URL。

 

Django提供了三種不一樣反向解析處理方式: 瀏覽器

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

2.在view中,使用django.core.urlresolvers.reverse()方法

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

 

以下的URLconf:url

from django.conf.urls import patterns, url urlpatterns = patterns('', #...
    url(r'^articles/(\d{4})/$', 'news.views.year_archive'), #...
)

 

0x01 模板中的反向解析

<a href="{% url 'news.views.year_archive' 2012 %}">2012 Archive</a>


# 解釋一下:首先,根據視圖 'news.views.year_artichive'能夠定位到指定的URLconf中,而後後面的2012來填充articles/\d{4} # 最終的結果爲<a href="articles/2012/">2012 Archive</a>

 

0x02 視圖中的重定向

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
相關文章
相關標籤/搜索