Django的路由系统
Posted 磕伴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django的路由系统相关的知识,希望对你有一定的参考价值。
用户访问了哪个 URL 就映射到哪个path然后到对应的方法 ,方法处理后,转到新的URL(可以是具体网址也可以是path )
1.单一路由
def test(request):
pass
urlpatterns = [ path(\'test/\',\'test), ]
2.正则路由
1 #-----传单个值 2 def edit(request,a1) 3 pass 4 5 6 urlpatterns = [ 7 re_path(\'edit/(\\w+)\',edit), 8 ] 9 10 11 a1与(\\w+)对应,也可以写多个/隔开就行,接收的时候也要写多个参数,位置严格一一对应。 12 13 #-----传多个值 14 def edit(request,a1,a2) 15 pass 16 17 18 urlpatterns = [ 19 re_path(\'edit/(\\w+)/(\\w+)\',edit), 20 ] 21 22 html传参的时候可以写成 23 <a href="/edit/{{row.id}}">编辑</a> 24 25 #-----给接收的参数起名字(与方法参数位置可不对应) 26 27 def edit(request,a1,a2) 28 pass 29 30 urlpatterns = [ 31 re_path(\'edit/(?P<a2>\\w+)/(?P<a1>\\w+)\',edit), 32 ] 33 34 #-------伪静态 35 36 def edit(request,a1) 37 pass 38 39 urlpatterns = [ 40 re_path(\'edit/(?P<a1>\\w+).html\',edit), 41 ] 42 43 html传参的时候可以写成 44 <a href="/edit/{{row.id}}.html">编辑</a>
3.给某个path命名( 反查出他的url,特有,用来做权限)
1 from django.urls import reverse 2 3 path(\'login/\',login,name=\'n1\'), 4 5 print(reverse(\'n1\')) 6 ↓ 7 /login/ 8 9 #---有多个值的话(想让生成的url是什么就能设置成什么) 10 11 re_path(\'edit/(?P<a2>\\w+)/(?P<a1>\\w+).html\',edit,name=\'n2\'), 12 13 def edit(request,a1,a2): 14 print(reverse(\'n2\',kwargs={\'a1\':11,\'a2\':22 })) 15 ↓ 16 /edit/22/11.html 17 18 #---用处:可以在html改变 19 <td><a href="/edit/">编辑</a></td>--> 为 20 <a href="{% url \'n2\'%}">编辑</a> 21 22 23 ---传值: 多个用空格隔开就行 24 <td><a href="/edit_student/{{row.id}}">编辑</a></td> 25 <td><a href="{%url \'love\' row.id %}">编辑</a></td>
4.路由分发 (协同开发)
一个项目可以有多个app,每个app是一个业务的模块
新建一个目录app01 from django.urls import path def login(request): return HttpResponse(\'ok app login\') urlpatterns = [ path(\'login/\',login), ] # urlpatterns = [ path(\'app01/\',include(\'app01.urls\')), ] # 浏览器:http://127.0.0.1:8000/app01/login/ #客户访问这个URL后先转到app01文件夹,然后include找到里面的urls文件,在里面的urlpatterns内再次进行匹配 输出结果:ok app login
以上是关于Django的路由系统的主要内容,如果未能解决你的问题,请参考以下文章