使用場景:
當我們在url的時候,一般情況下都是使用很明確的url地址。如在網(wǎng)頁里面使用登錄.像這樣的鏈接有很
多。假如有一天,突然需要改變登錄的鏈接,想將/login變成/login_first 這樣的話,就需要將url里面的正則改變成
^login_first/$,同時再將標簽里面的href變成/login_first。像這樣的鏈接太多了,根本就無法修改。
在template中使用name:
name--> url
所以這里就可以使用url里面自帶的name的方法。 ?? 對于像這樣鏈接的操作。 用法: 不帶參數(shù)的: {% url 'name' %} 帶參數(shù)的:參數(shù)可以是變量名?{% url 'name' 參數(shù) %}?所以這里的改變?yōu)椋簎rl('^login_first/$',views.login,name="login_first")(對于其他部分自動補腦),在. ?? 解釋:{% url 'login_first'%},這里的login_first代表著這個url自動去尋找django的url里面name="login_first"這個條鏈
接,并將前面的url賦給標簽中的href。
在python中
name---> url?
這時如何讓以前的 /add/3/4/自動跳轉到新的網(wǎng)址呢?要知道Django不會幫你做這個,這個需要自己來寫一個跳轉方法。 這里需要我們使用reverse這個函數(shù),作用:reverse 接收 url 中的 name 作為第一個參數(shù)
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 ?
##新添的函數(shù) ?
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 現(xiàn)在的話,我們訪問127.0.0.1/add/3/4/會得到新的鏈接/127.0.0.1/new_add/3/4/,并且新的鏈接的內容也是7
解釋:reverse的第一個參數(shù)為add2,那么它就會到url取新的鏈接,為new_add/,再加上后面的參數(shù),就成為/new_add/3/4,并且使用add2的函數(shù),得到想要的值。
參考:http://www.ziqiangxuetang.com/django/django-url-name.html
在python中
url---> name