Django框架中处理URLconf中特定的URL的方法


Posted in Python onJuly 20, 2015

有时你有一个模式来处理在你的URLconf中的一系列URL,但是有时候需要特别处理其中的某个URL。 在这种情况下,要使用将URLconf中把特殊情况放在首位的线性处理方式 。

比方说,你可以考虑通过下面这个URLpattern所描述的方式来向Django的管理站点添加一个目标页面

urlpatterns = patterns('',
  # ...
  ('^([^/]+)/([^/]+)/add/$', views.add_stage),
  # ...
)

这将匹配像 /myblog/entries/add/ 和 /auth/groups/add/ 这样的URL 。然而,对于用户对象的添加页面( /auth/user/add/ )是个特殊情况,因为它不会显示所有的表单域,它显示两个密码域等等。 我们 可以 在视图中特别指出以解决这种情况:

def add_stage(request, app_label, model_name):
  if app_label == 'auth' and model_name == 'user':
    # do special-case code
  else:
    # do normal code

不过,就如我们多次在这章提到的,这样做并不优雅: 因为它把URL逻辑放在了视图中。 更优雅的解决方法是,我们要利用URLconf从顶向下的解析顺序这个特点:

urlpatterns = patterns('',
  # ...
  ('^auth/user/add/$', views.user_add_stage),
  ('^([^/]+)/([^/]+)/add/$', views.add_stage),
  # ...
)

在这种情况下,象 /auth/user/add/ 的请求将会被 user_add_stage 视图处理。 尽管URL也匹配第二种模式,它会先匹配上面的模式。 (这是短路逻辑。)

Python 相关文章推荐
Python中函数的用法实例教程
Sep 08 Python
python实现连接mongodb的方法
May 08 Python
Python进程间通信用法实例
Jun 04 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
使用Python实现跳帧截取视频帧
May 31 Python
详解Python3 pandas.merge用法
Sep 05 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
Apr 07 Python
python中tab键是什么意思
Jun 18 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
python机器学习创建基于规则聊天机器人过程示例详解
Nov 02 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 #Python
python通过socket查询whois的方法
Jul 18 #Python
Python字符串匹配算法KMP实例
Jul 18 #Python
Python通过正则表达式选取callback的方法
Jul 18 #Python
Django的URLconf中使用缺省视图参数的方法
Jul 18 #Python
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 #Python
在Django框架中伪造捕捉到的URLconf值的方法
Jul 18 #Python
You might like
PHP实时显示输出
2008/10/02 PHP
php时区转换转换函数
2014/01/07 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
python解析xml文件操作实例
2014/10/05 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
爱国演讲稿500字
2014/05/04 职场文书
学习十八大宣传标语
2014/10/09 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
公安机关起诉意见书
2015/05/20 职场文书
委托书范本格式
2019/04/18 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
Java实现给Word文件添加文字水印
2022/02/15 Java/Android