反向解析: 當某一個url配置的地址發生變化時,頁面上使用反向解析生成地址的位置不需要發生變化。
比如:我們在視圖函數中定義的index
視圖函數爲如下:
def index(request):
return render(request, 'booktest/index.html')
我們的urls.py
路由文件定義如下:
url(r'^index$', views.index),
現在是可以訪問的,但是問題來了,如果我們想換首頁的函數爲如下:
url(r'^index22$', views.index),
這樣的話,就沒辦法匹配了,如果還想讓視圖函數中的index
函數進行匹配上的話,那麼可以用到反向解析這個方法。
1、 首先現在項目中的urls.py
中定義我們應用booktest
的路由url(r'^', include('booktest.urls', namespace='booktest')),
,加上namespace='booktest'
2、然後在應用中的urls.py
中定義我們路由url(r'^index22$', views.index, name='index'),
,加上name='index'
就可以進行匹配了。
3、在模板文件中也要有相應的變化,index
模板文件修改爲如下:
反向url解析:index<br>
<a href="{% url 'booktest:index' %}">index</a><br>
在模板文件中使用時,格式如下:
{% url 'namespace的名字:視圖函數名' %}
例如{% url 'booktest:fan2'%}
帶位置參數:{% url 'namespace的名字:name' 參數 %}
例如{% url 'booktest:show_args' 1 2 %}
路由文件定義如下:
url(r'^show_args/(\d+)/(\d+)', views.show_args, name='show_args'),
視圖函數定義如下:
def show_args(request, a, b):
return HttpResponse(a + ":" + b)
模板文件定義如下:
動態url反向解析:可變位置參數show_args<br>
<a href="{% url 'booktest:show_args' 1 2 %}">show_args</a><br>
帶關鍵字參數:{% url 'namespace的名字:name' 關鍵字參數 %}
例如{% url 'booktest:show_kwargs' c=3 d=4 %}
路由文件定義如下:
url(r'^show_kwargs/(?P<c>\d+)/(?P<d>\d+)$', views.show_kwargs, name='show_kwargs')
視圖函數定義如下:
def show_kwargs(request, c, d):
return HttpResponse(c + ":" + d)
模板文件定義如下:
動態url反向解析:可變位置參數show_kwargs<br>
<a href="{% url 'booktest:show_kwargs' c=3 d=4 %}">show_kwargs</a><br>