Django URLconf
Django提供了干净优雅的 URL 方案,URL配置文件是一个标准的 python 文件,支持动态配置。它的本质就是URL模式与调用的视图函数之间的映射表,最简单的配置文件如下:
from django.conf.urls.defaults import *
from sailing.manager.views import search urlaptterns = patterns('',
url(r'^search$',search),
)
上面使用的是传递函数对象的方式(在 python 中,函数是一级对象,你可以像传递其它变量一样传递它们。使用传递函数对象的方式,还可以对函数对象进行包装),下面使用的是传递字符串的方式:
from django.conf.urls.defaults import * urlaptterns = patterns('sailing.manager.views',
url(r'^search/$','search'),
)
如果使用字符串的方式,可以不用 import 相关模块,而且可以使用通用前缀(patterns 函数的第一个参数是一个字符串,表示一个视图函数的通用前缀)。当有不同的前缀时,还可以增加多个 patterns() 对象,然后相加即可,如:
from django.conf.urls.defaults import * urlaptterns = patterns('sailing.manager.views',
url(r'^search/$','search'),
)
urlaptterns += patterns('',
url(r'^admin/', include(admin.site.urls)),
)
大多数的URL模式会以 ^ 开始,以 $ 结束,如果在URL模式尾部有一个斜杠,表面上看是不匹配尾部不带斜杠的URL,但是默认地,尾部没有斜杠的URL如果不匹配任何模式,将被重定向至尾部包含斜杠的模式。所以在 urlpatterns 中配置URL时,应尽量在尾部带上斜杠。
另外,由于 urls.py 是标准的 python 文件,所以支持动态设定 urlpatterns,如只在DEBUG模式下有效的模式:
from django.conf import settings
from django.conf.urls.defaults import * if settings.DEUG:
urlpatterns = patterns('',
(r'^search/','search'),
)
URLconf 中,无命名正则表达式组中,如果想要捕获URL部分的数据,就加上小括号,Django 会将捕获的文本作为位置参数传递给视图函数。此外,还可以使用命名的正则表达式组来捕获URL,也要加上小括号,并且将其作为关键字参数传递给视图。命名的正则表达式组的语法是: (?P<name>pattern) ,它的优点是可读性强,而且可以在view函数中对参数重新排序,它的缺点是不够简洁。注意,在同一个 URLconf 中,命名组和非命名组不能同时存在,否则虽然不会抛出错误,但可能有会意想不到的问题,所以请尽量避免。
除了在URL模式中传递参数之外,patterns() 函数中每一个 URLconf 可以有第三个元素,它是一个 dict 类型,表示关键字参数与传递的值(该值可以是字符串,也可以是任何类型的对象)。视图函数只关心它获得了参数,而不关心这些参数是捕捉到的,还是额外提供的。但是当冲突出现的时候,额外 URLconf 参数优先于捕捉值,如:
urlpatterns = patterns('',
(r'^mydata/(?P<id>\d+)/$', views.my_view, {'id':3}),
)
则不管请求的URL中 id 的值是什么,都只会将 id = 3 传递到视图函数中。每个被捕获的参数都是作为字符串发送到视图函数中的,而不管正则表达式中的格式,所以在视图函数中,你可能需要做一些类型转换(但可能不需要捕捉异常,因为 URLconf 的正则表达式已经确保只有该类型的字符串才能传到这个视图中)。
还有一个细节是视图函数中的参数可以有默认值,这样一来,可以做一些动态的功能;相应的,也可以使用 python 可变参数的特性(参数前面有一个*号,表示传递的参数保存为一个 tuple,参数前有两个*号,表示传递的关键字参数保存为一个字典)
在 URLconf 中,除了可以包装匹配的函数对象之外,还可以通过 include 包含其它 URLconf 。每当 Django 遇到 include() 时,它将URL中已匹配模式的文本去除,将剩余部分发往 include() 中指定的 URLconf 进一步处理。URLconf 的第三个参数(额外视图函数的参数),也可以传递到 include() 中指定的 URLconf 中去。
Django URLconf的更多相关文章
- Django URLConf 进阶
Django处理一个请求 项目启动后根据 settings ROOT_URLCONF 决定项目根URLconf urlpatterns是django.conf.urls.url()实例的一个Pyth ...
- django URLconf调度程序
路由的编写方式是Django2.0和1.11最大的区别所在,Django官方迫于压力和同行的影响,不得不将原来的正则匹配表达式,改为更加简单的path表达式,但依然通过re_path()方法保持对1. ...
- 45、django工程(URLconf)
45.1.django URLconf 路由系统介绍: 1.说明: URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表, ...
- django 学习点滴
django连接数据库要安装第三方包,比如mysql的就是 python-mysqldb, 用apt-cache search python-mysql 搜索一下. django的project可以放 ...
- 结合使用AngularJS和Django
原地址 好吧,我承认自己很懒,时间又不够用. 翻译的几个文章都是虎头蛇尾,但我保证这次肯定不太监. 关键的单词不翻译,实在觉得翻译成汉语很别扭,括号里是参考翻译. 有问题和建议尽管提出来,我会改进完善 ...
- Tutorial: 结合使用AngularJS和Django
好吧,我承认自己很懒,时间又不够用. 翻译的几个文章都是虎头蛇尾,但我保证这次肯定不太监. 关键的单词不翻译,实在觉得翻译成汉语很别扭,括号里是参考翻译. 有问题和建议尽管提出来,我会改进完善. Tu ...
- Django开发目录
Django开发[第一章]:Django基础和基本使用 Django开发[第二章]:Django URLConf 进阶 Django开发[第三章]:Django View 进阶 Django开发[第四 ...
- Django基础和基本使用
Django基础 Django是Python下的一款著名的Web框架 框架 任何语言进入到高级部分时,会有认证.session.http.连接数据库等等功能操作,没有框架时需要自己实现 框架 是整个或 ...
- Django第一步
对于一个web框架,掌握了三部分的内容,就可以说是迈出了第一步. 1. 准备开发环境 2. 创建一个工程,并运行 3. 开发hello world应用 1. 准备环境 首先应该是安装python和dj ...
随机推荐
- 【BZOJ-4521】手机号码 数位DP
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 303 Solved: 194[Submit][Status ...
- 【bzoj1500】 noi2005—维护数列
http://www.lydsy.com/JudgeOnline/problem.php?id=1500 (题目链接) 题意 要求维护数列,操作有区间删除,区间插入,区间反转,区间修改,区间求和,求最 ...
- UOJ260 【NOIP2016】玩具谜题
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- asp.net接收ajax请求参数时为空的现象
如题,如果使用ajax请求asp.net后台时,如果使用jquery时,默认是添加了请求头,使后台能识别,并能通过Request对象进行获取. 但是如果你使用的是window.XMLHttpReque ...
- SPOJ375 Query on a tree
Description You are given a tree (an acyclic undirected connected graph) with N nodes, and edges num ...
- linux下制作win7安装盘(mint、ubuntu、debian)
今天替同事装系统.因为现在的debian系系统都可以直接用dd拷贝iso到u盘的方法进行安装,所以,想当然的用dd来制作windows安装盘.没反应!所以有了下面的方法. 1. 将u盘格式化为ntfs ...
- STM32的12864液晶串行控制
发现12864只有主函数中不断刷新才有数据显示,,原因是写指令和写数据中没有加延时,加一个延时就好了.
- 浅析基本AI五子棋算法
五子棋是所有棋类博弈中比较简单的了,这里介绍的也只是一种非常基本的AI策略.其实,包括之前的AI贪吃蛇,感觉这两个AI其实体现的都是一种建模思想,把一个现实中的问题模型化,抽象化,得到其一般特征,再设 ...
- MVC5-3 Result分析
众多的Result 使用MVC进行开发,可以看到有ActionResult.ContentReuslt.JsonResult..等,今天对这些Result进行背后分析.它到底是如何做到的 Action ...
- CentOS安装MongoDB
1. touch /etc/yum.repos.d/mongodb.repo vi /etc/yum.repos.d/mongodb.repo [mongodb] name=MongoD ...