在使用Django 項目時馏谨,一個常見的需求是獲得URL 的最終形式,以用于嵌入到生成的內(nèi)容中(視圖中和顯示給用戶的URL等)或者用于處理服務(wù)器端的導(dǎo)航(重定向等)乌妙。人們強烈希望不要硬編碼這些URL(費力、不可擴展且容易產(chǎn)生錯誤)或者設(shè)計一種與URLconf 毫不相關(guān)的專門的URL 生成機制,因為這樣容易導(dǎo)致一定程度上產(chǎn)生過期的URL奠蹬。
在需要URL 的地方,對于不同層級嗡午,Django 提供不同的工具用于URL 反查:
在模板中:使用url 模板標簽囤躁。
在Python 代碼中:使用django.core.urlresolvers.reverse() 函數(shù)。
urls.py:
from django.conf.urls import url
from . import views
urlpatterns = [
#...
url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),
#...
]
在模板中:
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>
<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
在python中
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
def redirect_to_year(request):
# ...
year = 2006
# ...
return HttpResponseRedirect(reverse('news-year-archive', args=(year,))) # 同redirect("/path/")
圖片發(fā)自簡書App