反向解析: 当某一个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>