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 action='{% url 'index' %}' method='post'>
...
</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<para>\d+)/$', views.index_list, name='index')
]

app02中的url.py文件:

from app02 import views
 
app_name = 'app02'
urlpatterns = [
    url(r'^index02/(?P<para>\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了并且可以传递对应的参数值。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值