Django中url name

花了好長時間才明白這個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

相關文章
相關標籤/搜索