经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django之路由分发和反向解析
来源:cnblogs  作者:日天达人  时间:2019/4/16 8:56:10  对本文有异议

一.路由分发:

路由分发是指:总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系

 

  1. from django.conf.urls import url,include
  2. from app03 import urls as app03_urls
  3. from app01 import urls as app01_urls
  4. from app02 import urls as app02_urls
  5. urlpatterns = [
  6. url(r'^app03/',include(app03_urls)),
  7. url(r'^app01/',include(app01_urls)),
  8. url(r'^app02/',include(app02_urls))
  9. ]

 

首先导入include模块,其次确保app下有urls文件,运行效果如下:

 

 如果想访问app01下的index页面,只需要加上app01/index即可

同样的app中也可以有views文件和templates文件夹,这样每个app就是独立的前后端程序

 

二.反向解析

试想一个场景,你有200多个a标签,href都指向index/,有一天在urls里面index改为了new_index,那么你只能手动改变a标签中的href,当你改完,又变成了my_index,那么一天的时间都可能在改地址,那么有没有什么方法,不再把程序写死,反向解析就是应用于此。

通过名字反向推导出页面文件,类似于字典

无分组:

 

  1. urlpatterns = [
  2. url(r'^login/',views.login,name='login_name'),
  3. ]

 

第一步指定name

在后端的使用:

首先导入reverse模块

 

  1. from django.shortcuts import reverse

 

其次在views的函数里面:

  1. def login(request):
  2. res=reverse('login_name')#login_name是在urls里面定义的名字
  3. print(res)

其中res的打印如下:

在前端的使用:

 

  1. <a href="{%url 'login_name'%}">1111111111</a>

 

语法:{%url ‘ 名称’%}

这样的写法就不会写死了,无论怎么改,只要名字不变,都可以导向该页面

 

 

无名分组:

 

  1. urlpatterns = [
  2. url(r'^login/(\d+)',views.login,name='login_name'),
  3. ]

 

views的函数:

  1. def login(request,xxx):
  2. res=reverse('login_name',args=(xxx,))
  3. print(res)

打印一下res:

 

  1. res=reverse('login_name',args=(xxx,)),其中的args=(xxx,),不是固定的,如果你喜欢写个1也不会影响结果,
    例如
    res=reverse('login_name',args=(1,)),只要满足匹配规则,都是可以随意写的

在前端的使用:

  1. <a href="{%url 'login_name' xxx%}">1111111111</a>

其中xxx是我在renderf中传入的参数,可以动态的指定路径,如果嫌弃麻烦,可以随意写个满足正则的参数,我的正则是\d+,所以下面的也是可以的

  1. <a href="{%url 'login_name' 2333%}">1111111111</a>
View Code

 

 

语法:{%url ‘ 名称’ 参数%},必须要有,不然不能匹配

有名分组:

  1. urlpatterns = [
  2. url(r'^login/(?P<year>\d+)',views.login,name='login_name'),
  3. ]

 views的函数:

  1. def login(request,year):
  2. res=reverse('login_name',kwargs={'year':year})
  3. print(res)

打印一下res:

  1. res=reverse('login_name',kwargs={'year':year},其中的kwargs={'year':year}同样不是固定的,如果你喜欢写个1也不会影响结果,
  1. 只要满足匹配规则,都是可以随意写的

在前端的使用:

  1.  
  1. <a href="{%url 'login_name' xxx%}">1111111111</a>
  1.  

在前端使用是和无名分组一样的

 

PS:在使用无名分组,有名分组的时候,前端一定要在定义的名字后面加上参数,不然不能匹配

  1.  

 

原文链接:http://www.cnblogs.com/98WDJ/p/10712965.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号