第一步:protect中的urls.py文件
from .views import index_list
url(r'^index/$',index_list,name='index')
第二步:app下的views.py文件
from django.shortcuts import render,HttpResponse,redirect,reverse
# 第一种情况(未使用reverser)redirect括号参数直接传入url的name值也能重定向到指定页面,加入reverse显得跟专业点 emmm..
return redirect('/index/')
# 第二种情况 (使用reverse进行反向url解析)
return redirect(reverse('index'))
在html文件中直接使用url的name值:
总结:URL反向解析的好处就是直接生成对应的url地址,使用方便,避免手打过长的url地址,还容易出现错误。
学过java,c#的同学应该知道这个概念,为自己的app开辟一个独立的空间,进而定义自己的方法。
它的作用就是即使不同的APP使用相同的url名称,在URL的命名空间模式下也可以让你得到想要的url地址。
举个例子:
project中的url.py文件:
from django.conf.urls import url,include
urlpatterns = [
url(r'^app01/$',include('app01.urls'),namespace='app01'),
url(r'^app02/$',include('app02.urls'),namespace='app02'),
]
app01中的url.py文件:
from app01 import views
app_name = 'app01'
urlpatterns = [
url(r'^index01/(?P\d+)/$' , views.index_list, name='index')
]
app02中的url.py文件:
from app02 import views
app_name = 'app02'
urlpatterns = [
url(r'^index02/(?P\d+)/$' , views.index_list, name='index')
]
现在,我的两个app中 url的名称重复了,我反转URL的时候就可以通过命名空间的名称得到我当前的URL。
使用场景
语法:
‘命名空间名称:URL名称’
1.模板中使用:
{% url 'app01:index' para=666 %}
2.views中的函数中使用
from django.shortcuts import render,HttpResponse,redirect,reverse
...
return redirect(reverse('app01:detail',kwargs={'para':666}))
这样即使app中URL的命名相同,我也可以反转得到正确的URL了并且可以传递对应的参数值。