使用場景:
當我們在url的時候,一般情況下都是使用很明確的url地址。如在網頁里面使用<a href="/login">登錄</a>.像這樣的鏈接有很
多。假如有一天,突然需要改變登錄的鏈接,想將/login變成/login_first 這樣的話,就需要將url里面的正則改變成
^login_first/$,同時再將<a>標簽里面的href變成/login_first。像這樣<a>的鏈接太多了,根本就無法修改。
在template中使用name:
name--> url
所以這里就可以使用url里面自帶的name的方法。 對於像<a>這樣鏈接的操作。 用法: 不帶參數的: {% url 'name' %} 帶參數的:參數可以是變量名 {% url 'name' 參數 %} 所以這里的改變為:url('^login_first/$',views.login,name="login_first")(對於其他部分自動補腦),在<a href="{% url'login_first'%}">. 解釋:{% url 'login_first'%},這里的login_first代表着這個url自動去尋找django的url里面name="login_first"這個條鏈
接,並將前面的url賦給<a>標簽中的href。
在python中
name---> url
這時如何讓以前的 /add/3/4/自動跳轉到新的網址呢?要知道Django不會幫你做這個,這個需要自己來寫一個跳轉方法。 這里需要我們使用reverse這個函數,作用:reverse 接收 url 中的 name 作為第一個參數
old的方法:url: url(r'^add/(\d+)/(\d+)/$', views.add2),
views: from django.http import HttpResponseRedirect,HttpResponse
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
在python中
url---> name