Django学习之URLconf
Django处理request的步骤:
1.确定根URLconf
2.载入urls.py,找到变量urlpatterns,urlpatterns是django.conf.urls.url()
的实例对象(列表)
url(regex, view, kwargs=None, name=None)[source]
regex是一个字符串或者 ugettext_lazy(),字符串包含正则表达式,兼容re模块,字符串通常使用原始字符串语法(r“),以便它们可以包含像\ d这样的序列,而不需要使用另一个反斜杠来转义反斜杠。 view参数是一个视图函数,或者基于类的视图的as_view()的结果,亦或者是一个include()。 kwargs允许像视图函数或者方法传递额外的参数,参见 Passing extra options to view functions查看实例。 name参数的意义查看 Naming URL patterns
Naming URL patterns
为了执行URL反转,您需要使用命名URL模式,如上例所示。 用于URL名称的字符串可以包含您喜欢的任何字符。 当您命名URL模式时,请确保使用不太可能与任何其他应用程序选择的名称冲突的名称。 如果您调用了URL模式注释,而另一个应用程序也执行相同的操作,那么在使用此名称时,不能保证在您的模板中插入哪个URL。 在您的网址名称上放置一个前缀,也许是从应用程序名称派生出来的,可以减少碰撞的几率。 我们建议像myapp-comment而不是comment。
Passing extra options to view functions URLconfs有一个钩子,可以让您传递额外的参数到您的视图函数,作为Python字典。 django.conf.urls.url()函数可以使用一个可选的第三个参数,它应该是一个额外的关键字参数的字典,以传递给view函数。 例如:
from django.conf.urls import url
from . import views urlpatterns = [
url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
]
在联合框架中使用此技术将元数据和选项传递给视图。
在这个例子中,对于/ blog / 2005 /的请求,Django将调用views.year archive(request,year ='2005',foo ='bar')。
处理冲突:
可以使用一个URL模式来捕获命名关键字参数,并在其额外参数的字典中传递具有相同名称的参数。 当这种情况发生时,字典中的参数将被使用,而不是在URL中捕获的参数。
3.Django按顺序执行每一个URL模式,当第一个request的URL匹配即停止向下执行
4.一旦正则表达式匹配成功,Django导入并执行视图函数(或者基于类的视图函数),以下参数可传递到视图函数:
HttpRequest
实例对象
如果匹配的正则表达式没有返回任何命名组,那么来自正则表达式的匹配将作为位置参数提供。
关键字参数由正则表达式匹配的任何命名组组成,由在django.conf.urls.url()的可选kwargs参数中指定的任何参数覆盖。
5.如果没有正则表达式匹配,或者在此过程中的任何一点出现异常,Django将调用适当的错误处理视图。 参见下面的错误处理。
命名组
上述示例使用简单的,未命名的正则表达式组(通过括号)捕获URL的位,并将它们作为位置参数传递给视图。 在更高级的使用中,可以使用命名的正则表达式组来捕获URL位,并将它们作为关键字参数传递给视图。
在Python正则表达式中,命名的正则表达式组的语法是(?P <name> pattern),其中name是组的名称,而pattern是某些匹配的模式。
最新文章
- CSS中LI圆点样式li {list-style-type:符号名称}
- YYCache设计思路及源码学习
- 转载《Android Adapter简单总结》
- Python爬虫入门
- PoEdu- C++阶段班【Po学校】-Lesson03_构造函数精讲 - 第5天
- ZOJ 3811 Untrusted Patrol
- Three Sources of a Solid Object-Oriented Design
- LIS-Program E
- leetcode 108 Convert Sorted Array to Binary Search Tree ----- java
- UVA 1658 Admiral 海上将军(最小费用流,拆点)
- redirect_uri参数错误解决方法
- 最简单的基于FFMPEG的封装格式转换器(无编解码)
- JAVA 相关资料
- MySQL计数器表的设计
- Redis数据类型及命令
- 【Python】多进程-4
- Qsys 设计流程---Qsys System Design Tutorial
- 网络对抗技术 2017-2018-2 20152515 Exp3 免杀原理与实践
- Python2图像文本识别
- day7 面向对象进阶
热门文章
- 五角数 Exercise06_01
- 利用位操作进行IP地址的转化
- Network Connection Lost When Windows 8 Goes To Sleep
- svn的安装(整合apache、ldap)包括错误解决post commit FS processing had error
- Widows 注册表 HKEY_CLASSES_ROOT
- coffeescript 1.6.3使用帮助
- chromatic aberration
- webpack配置:less/sass文件打包和分离、自动处理css前缀、消除未使用的css及完整的webpack.config.js文件
- webpack配置:css文件打包、JS压缩打包和HTML文件发布
- Private strand flush not complete错误