django 反向解析

反向解析: 当某一个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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章