URL的反向解析


簡單來說就是可以給我們的URL匹配規則起個名字,一個URL匹配模式起一個名字。


這樣我們以后就不需要寫死URL代碼了,只需要通過名字來調用當前的URL

舉個簡單的例子:

url(r'^home', views.home, name='home'),  # 給我的url匹配模式起名(別名)為 home,別名不需要改,路徑你就可以隨便改了,別的地方使用這個路徑,就用別名來搞
url(r'^index/(\d*)', views.index, name='index'),  # 給我的url匹配模式起名為index

 

  這樣:

  在模板里面可以這樣引用:

{% url 'home' %}  #模板渲染的時候,被django解析成了這個名字對應的那個url,這個過程叫做反向解析

 

 在views函數中可以這樣引用:(后面再講這個視圖函數應用反向解析的內容,上面的是模板應用反向解析的過程)

from django.urls import reverse

reverse("index", args=("2018", ))

  例子:
  考慮下面的URLconf:

復制代碼
from django.conf.urls import url

from . import views

urlpatterns = [
    # ...
    url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),
    # ...
]
復制代碼

 

  根據這里的設計,某一年nnnn對應的歸檔的URL是/articles/nnnn/

  你可以在模板的代碼中使用下面的方法獲得它們:

復制代碼
<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.urls import reverse
from django.shortcuts import redirect

def redirect_to_year(request):
    # ...
    year = 2006
    # ...
    return redirect(reverse('news-year-archive', args=(year,))) #或者直接return redirect('news-year-archive',year) redirect內部會自動調用reverse來進行反向解析
復制代碼

 

  如果出於某種原因決定按年歸檔文章發布的URL應該調整一下,那么你將只需要修改URLconf 中的內容。

  在某些場景中,一個視圖是通用的,所以在URL 和視圖之間存在多對一的關系。對於這些情況,當反查URL 時,只有視圖的名字還不夠。

  注意:

  為了完成上面例子中的URL 反查,你將需要使用命名的URL 模式。URL 的名稱使用的字符串可以包含任何你喜歡的字符。不只限制在合法的Python 名稱。

  當命名你的URL 模式時,請確保使用的名稱不會與其它應用中名稱沖突。如果你的URL 模式叫做comment,而另外一個應用中也有一個同樣的名稱,當你在模板中使用這個名稱的時候不能保證將插入哪個URL。

  在URL 名稱中加上一個前綴,比如應用的名稱,將減少沖突的可能。我們建議使用myapp-comment 而不是comment


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com