DJango系列的上一篇我们讲到了它是怎么解析和匹配URL的,并从URL中提取一些有用的信息(曾以year和month为例);但是,URL的管理仍然是一个巨大的工程,我们不得不维护数量庞大的pattern,即使有正则表达式的支持。另一方面,URL数量的增大也将带来匹配和解析正确性的考验。这一篇我们会进一步深入URL的学习,并掌握Reverse和Resolve。

一:Reverse和Resolve的作用
我们可以为某一个url映射定义一个名字,称之为url_name,这样有什么用呢?在此之前我们先介绍Reverse和Resolve的含义,函数模板如下:

# 其中viewname表示url_name
# 其余的只要理解args即可,表示一些必要的参数,详见例子
# 作用:从url_name得到URL
reverse(viewname[, urlconf     =     None     , args     =     None     , kwargs     =     None     , current_app     =    None     ])
# path表示url
# 作用: 从url得到相互映射的url_name
resolve(path, urlconf     =     None     )

那什么情况下我们需要用到它们呢?第一,如果在你的Project中需要给出一个网址(如网页重定向等),我们可以通过传递给Reverse函数相应的url_name以及必要的参数,那么便会生成相应的url;第二,在你调试阶段,可以通过Resolve函数来测试你的网站的URL对应关系是否如你所愿。

二:一个简单的例子
修改mysite/urls.py成如下代码:

from     django.conf.urls     import     patterns, include, ur
home     =     'hello.views.home'
urlpatterns     =     patterns('',
         url(r     '^test$'     , home, name     =     "test_hello"     ),
         url(r     '(\d{4})/(\d{2})$'     , home, name     =     "test_hello_2"     ),
)

在网站根目录下运行:python manage.py shell进入DJango提供的shell环境.然后依次输入如下命令,你可以好好理解一下它们的输出结果:

#这一段曾经有错误,感谢xd(见评论区)同学的指正,万分感谢
from     django.core.urlresolvers     import     reslove, reverse
url     =     resolve(     '/2012/10'     )
print     url.url_name               
#输出应为test_hello_2
reverse(     'test_hello_2'     ,args     =     (     '2012'     ,     '10'     ))
#输出应为/2012/10

三:URL Include的目的
当一个Project的模块增多,只在根目录下维护一个urls.py来管理全局的URL对应关系显然是不合适的。如果每个模块都能管理和自己相关的URL,而根目录下的urls.py只负责把它们全部包含进来,不就解决问题了么?这有点像是C/C++里头文件的概念。URL Include的模板如下:

# regex 是正则式
# URL_FILE_NAME 是子模块的urls.py
url(regex, include(     'URL_FILE_NAME'     ))

四:Include的例子
在hello文件下新建urls.py如下:

from     django.conf.urls     import     patterns, include, url
home     =     'home'
urlpatterns     =     patterns('',
         url(r     '^$'     , home),
)

然后修改mysite/urls.py,增加如下一行即可:

url(r     '^'     , include(     'hello.urls'     )),

现在通过python manage.py runserver启动服务器,在网址输入localhost:8000是不是显示正常呢?如果正常则说明我们include成功了。

不知道你注意到了没有,在mysite/urls.py的正则表达式里面是没有$的。原来在include的用法里,要匹配子模块的urls时是要先通过父模块的匹配,举个例子,如果mysite/urls.py中的匹配为:’^t’,那么传递进include中时是从t之后的开始的!

DJango — URL的Reverse和Resolve相关推荐

  1. [py]django url 参数/reverse和HttpResponseRedirect

    参考 需要完成以下任务 - 访问http://127.0.0.1:8000/ 返回"hello maotai"或home.html - 访问http://127.0.0.1:800 ...

  2. django url中redirect与 reverse

    redirect与reverse@TOC django --version 2.05 1,redirect 解决的问题:## 标题 用户浏览网页的时候没有登录,自动跳转到登录页面 代码: cms:ap ...

  3. Django URL

    一.创建Django项目: 用命令行创建: 创建项目:在终端通过命令:django-admin startproject [项目名称] 即可创建,比如:django-admin startprojec ...

  4. django——url(路由)配置

    URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除此之外的任何URL都不被 ...

  5. 转 Django url 标签的使用

    Django url 标签的使用 期初用django 开发应用的时候,完全是在urls.py 中硬编码配置地址,在views.py中HttpResponseRedirect()也是硬编码转向地址,当然 ...

  6. django url 正则表达式收集

    django url 正则表达式收集 1 url(r'^about/$',views.about), url(r'^list/$',views.listing), 只匹配: localhost:800 ...

  7. django -- url映射

    * url映射 * 传递参数   * 应用命令空间   * 默认参数 ## 昨天遇到的问题 * windows 中 用户名 不要写成中文    * 如果说 遇到 mkvirtualenv  worko ...

  8. django -- url 的 name 属性

    在html的form中使用给url定义的name值,可以在修改url时不用在修改form的src. urls.py from django.conf.urls import url from myte ...

  9. django url 生效_Django基础知识

    最近开始看Django框架,对我来说时间一长必定会忘记,所以还是做做笔记!学Django之前还看了点关于Web框架的原理什么的...杂七杂八!!! 0x00 关于Web服务 A. Web间的通信 We ...

最新文章

  1. java三角形创建子类_如何创建子类,以便参数属于Java中的子类类型
  2. ch5 MySQL 备份与恢复
  3. OpenJdk7编译
  4. Visual Studio 2015和2017里面应该创建哪种 Class Library
  5. es6严格模式需要注意的地方
  6. python知识汇总,python一期
  7. 下班后比你多学2个小时的人,在看这几个公众号
  8. numeric.js
  9. sklearn中的train_test_split函数
  10. xml文件查看器_万能文件查看器,一个软件打开电脑所有文件
  11. kalipython图形界面_Kali入侵入门版笔记!!!
  12. 自定义http报头_Http请求报头设置
  13. matlab 脉冲频域压缩,大作业-雷达线性调频脉冲压缩的原理及其MATLAB仿真.doc
  14. Aho-Corasick automaton(AC自动机)解析及其在算法竞赛中的典型应用举例
  15. 除了 P站,原来还有A、C、D、E、G、H、K、M、N ... 站,全是老司机!
  16. 随手写的QT程序:文件大小转化可读字符串,整数转 B,KB,MB......
  17. Xdebug中文文档-基础特性
  18. 转载 :高中时候想的一个脑洞大开的故事
  19. 怎么修改win8计算机用户名和密码忘了怎么办,win8忘记了登陆密码怎么办|win8用户登入密码忘了的解决措施...
  20. OLE程序开发利用(开发EXCEL)

热门文章

  1. 955.WLB 不加班公司名单,2022年最新版!新增5家公司
  2. 当代年轻人加班报告!
  3. TensorFlow的安装方法
  4. MangoTrainingCourse课程hands-on lab-1
  5. M面试题-HTTPS和HTTP的区别
  6. 卢伟冰称天玑9000调校顺利 Redmi K50系列要来了
  7. “双减”后首份半年报 新东方在线营收亏损双减
  8. 环球影城门票开售,开园日门票1分钟内售罄
  9. 高德车道级导航已上线8城 新增支持小米11 Pro
  10. 敢开“电动爹”回老家,你说我胆子大不大?