花了好長時間才明白這個name參數的含義。便寫下來了備忘html
當咱們在url的時候,通常狀況下都是使用很明確的url地址。如在網頁裏面使用<a href="/login">登陸</a>.像這樣的連接有很django
多。假若有一天,忽然須要改變登陸的連接,想將/login變成/login_first 這樣的話,就須要將url裏面的正則改變成函數
^login_first/$,同事再將<a>標籤裏面的href變成/login_first。像這樣<a>的連接太多了,根本就沒法修改。因此這裏就能夠url
使用url裏面自帶的name的方法。 對於像<a>這樣連接的操做。 用法: 不帶參數的: {% url 'name' %} 帶參數的:參數能夠是變量名 {% url 'name' 參數 %} 因此這裏的改變爲:url('^login_first/$',views.login,name="login_first")(對於其餘部分自動補腦),在<a href="{% urlspa
'login_first'%}">. 解釋:{% url 'login_first'%},這裏的login_first表明着這個url自動去尋找django的url裏面name="login_first"這個條鏈htm
接,並將前面的url賦給<a>標籤中的href。import
這時如何讓之前的 /add/3/4/自動跳轉到新的網址呢?要知道Django不會幫你作這個,這個須要本身來寫一個跳轉方法。 這裏須要咱們使用reverse這個函數,做用:reverse 接收 url 中的 name 做爲第一個參數登錄
old的方法:url: url(r'^add/(\d+)/(\d+)/$', views.add2),變量
views: from django.http import HttpResponseRedirect,HttpResponse request
from django.core.urlresolvers import reverse
def add2(request,a,b):
c=int(a)+int(b)
return HttpResponse(str(c))
new方法:
url(r'^add/(\d+)/(\d+)/$', views.add2_redirect),
url(r'^new_add/(\d+)/(\d+)/$', views.add2, name='add2'),
views:
from django.http import HttpResponseRedirect,HttpResponse
from django.core.urlresolvers import reverse
##新添的函數
def add2_redirect(request, a, b):
return Redirect(reverse('add2', args=(a, b))
def add2(request,a,b):
c=int(a)+int(b)
return HttpResponse(str(c))
本來咱們訪問127.0.0.1/add/3/4/ 會獲得7 如今的話,咱們訪問127.0.0.1/add/3/4/會獲得新的連接/127.0.0.1/new_add/3/4/,而且新的連接的內容也是7
解釋:reverse的第一個參數爲add2,那麼它就會到url取新的連接,爲new_add/,再加上後面的參數,就成爲/new_add/3/4,而且使用add2的函數,獲得想要的值。
參考:http://www.ziqiangxuetang.com/django/django-url-name.html