URL别名和反向解析、路由分发和URL命名空间

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


URL别名和反向解析

urls.py

from django.conf.urls import url
from django.contrib import admin

from app01 import views
from app01 import views
'''给URL起别名,在URL后面加name参数'''
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^book/list/', views.book_list, name='book_list'),
    url(r'^book/add/', views.book_add,name='book_add'),
    url(r'^book/edit/(\d+)/', views.book_edit, name='book_edit'), # /book/edit/2/
    url(r'^book/del/(?P<n>\d+)/', views.book_del,name='book_del'), # /book/edit/2/
]

视图函数部分

from django.urls import reverse

print(reverse('book_list')) #/book/list/
print(reverse('book_edit',args=(2,))) # /book/edit/1/  URL的无名分组参数
print(reverse('book_edit',kwargs={'n': 1,})) # /book/edit/1/  URL的有名分组参数

return redirect('book_list')
'''redirect重定向可以不用写reverse就可以反向解析,因为redirect方法里有reverse方法'''
return redirect(reverse('book_list'))

HTML部分

<!-- 无参数的  -->
<a class="btn btn-primary" href="{% url 'book_add' %}">添加书籍</a>

<!-- 无名分组参数的 -->
<a href="{% url 'book_edit' books.id 3 4 %}" class="btn btn-warning">编辑</a>

<!-- 有名分组 -->
<!-- 以下两种方法都可以 -->
<!-- 多个参数用空格分开 -->
<a href="{% url 'book_del' books.id %}" class="btn btn-danger">删除</a>
<a href="{% url 'book_del' n=books.id %}" class="btn btn-danger">删除</a>

路由分发和URL命名空间

项目主目录下的urls.py

'''当用户访问的路径为 /app01/index/那么会先找到总路由,总路由先匹配路径前缀,
匹配好之后,就找到对应的应用下面的urls.py文件中的路径来匹配剩余部分路径,然后执行对应的视图函数.'''
from django.conf.urls import url, include
from django.contrib import admin

from app01 import views

'''URL分发使用include方法,
命名空间使用namespace属性,,是为了解决路径重名的问题,开辟独立的空间把应用所对应的url存到空间站,重名路径就不会相互干扰'''
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/', include('app01.urls',namespace='app01')),
    url(r'^app02/', include('app02.urls',namespace='app02')),
]

app01/urls.py

复制代码
from app01 import views

urlpatterns = [
    url(r'^index/', views.index, name='index'),
    url(r'^book/list/', views.book_list, name='book_list'),
    url(r'^book/add/', views.book_add, name='book_add'),
    url(r'^book/edit/(\d+)/', views.book_edit, name='book_edit'), 
    url(r'^book/del/(?P<n>\d+)/', views.book_del, name='book_del'), 
]

app01/views.py

def index(request):
	'''app01:index命名空间在视图中的写法,由应用名(namespace='app01'):路径'''
    print(reverse('app01:index'))
    return HttpResponse('app01的路径:' + reverse('app01:index'))

app02/urls.py

from app02 import views
urlpatterns = [
    url(r'^index/', views.index, name='index'),
]

app02/views.py

def index(requset):
    print(reverse('app02:index'))
    return HttpResponse('app02的路径: ' + reverse('app02:index'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值