django路由系统(URL命名及反向解析和命名空间namespace)

命名URL和URL反向解析

第一步: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值:

... form>

总结:URL反向解析的好处就是直接生成对应的url地址,使用方便,避免手打过长的url地址,还容易出现错误。

命名空间 namespace

学过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了并且可以传递对应的参数值。

你可能感兴趣的:(Django进阶)