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的更多相关文章

  1. Django URLConf 进阶

    Django处理一个请求 项目启动后根据 settings  ROOT_URLCONF 决定项目根URLconf urlpatterns是django.conf.urls.url()实例的一个Pyth ...

  2. django URLconf调度程序

    路由的编写方式是Django2.0和1.11最大的区别所在,Django官方迫于压力和同行的影响,不得不将原来的正则匹配表达式,改为更加简单的path表达式,但依然通过re_path()方法保持对1. ...

  3. 45、django工程(URLconf)

    45.1.django URLconf 路由系统介绍: 1.说明: URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表, ...

  4. django 学习点滴

    django连接数据库要安装第三方包,比如mysql的就是 python-mysqldb, 用apt-cache search python-mysql 搜索一下. django的project可以放 ...

  5. 结合使用AngularJS和Django

    原地址 好吧,我承认自己很懒,时间又不够用. 翻译的几个文章都是虎头蛇尾,但我保证这次肯定不太监. 关键的单词不翻译,实在觉得翻译成汉语很别扭,括号里是参考翻译. 有问题和建议尽管提出来,我会改进完善 ...

  6. Tutorial: 结合使用AngularJS和Django

    好吧,我承认自己很懒,时间又不够用. 翻译的几个文章都是虎头蛇尾,但我保证这次肯定不太监. 关键的单词不翻译,实在觉得翻译成汉语很别扭,括号里是参考翻译. 有问题和建议尽管提出来,我会改进完善. Tu ...

  7. Django开发目录

    Django开发[第一章]:Django基础和基本使用 Django开发[第二章]:Django URLConf 进阶 Django开发[第三章]:Django View 进阶 Django开发[第四 ...

  8. Django基础和基本使用

    Django基础 Django是Python下的一款著名的Web框架 框架 任何语言进入到高级部分时,会有认证.session.http.连接数据库等等功能操作,没有框架时需要自己实现 框架 是整个或 ...

  9. Django第一步

    对于一个web框架,掌握了三部分的内容,就可以说是迈出了第一步. 1. 准备开发环境 2. 创建一个工程,并运行 3. 开发hello world应用 1. 准备环境 首先应该是安装python和dj ...

随机推荐

  1. MapReduce实现二度好友关系

    一.问题定义 我在网上找了些,关于二度人脉算法的实现,大部分无非是通过广度搜索算法来查找,犹豫深度已经明确了2以内:这个算法其实很简单,第一步找到你关注的人:第二步找到这些人关注的人,最后找出第二步结 ...

  2. SQL Server 2008及以上版本出现”SQL Server 复制需要有实际的服务器名称才能连接到服务器...“的问题解决

    出现如下错误: 这是由于安装时的计算机名更改导致会出现如上的错误. 解决方法: 1.SQL方式: 1)先执行如下脚本,看下名称是否一致 use master go select @@servernam ...

  3. ListView优化-ViewHolder的优化备份

    ViewHolder.java package cn.edu.bzu.util; import android.content.Context; import android.util.SparseA ...

  4. Bzoj2756 [SCOI2012]奇怪的游戏

    2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 3220  Solved: 886 Description ...

  5. PHP FastCGI RCE Vul

    catalog . Introduction . nginx文件类型错误解析漏洞 . 针对直接公网开放的Fast-CGI攻击 . 通过FCGI API动态修改php.ini中的配置实现RCE 1. I ...

  6. grid列的值格式化

    //列格式化 waf.defineCustomeClass("cellformatter.ratioFomatter", cellformatter.defaultFormatte ...

  7. Python 操作 mongodb 数据库

    原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...

  8. 深入浅出Redis02 使用Redis数据库(String类型)

    一 String类型 首先使用启动服务器进程 : redis-server.exe 1. Set 设置Key对应的值为String 类型的value. 例子:向 Redis数据库中插入一条数据类型为S ...

  9. redis常用配置

    daemonize yes #是否以后台进程运行,默认为no pidfile /var/run/redis.pid #如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid ...

  10. swfUpload 上传图片

    前端: <script src="~/Scripts/swfupload/swfupload.js"></script> <script src=&q ...