在Django的URLconf中进行函数导入的方法


Posted in Python onJuly 18, 2015

看下这个 URLconf:

from django.conf.urls.defaults import *
from mysite.views import hello, current_datetime, hours_ahead

urlpatterns = patterns('',
  (r'^hello/$', hello),
  (r'^time/$', current_datetime),
  (r'^time/plus/(\d{1,2})/$', hours_ahead),
)

在 URLconf 中的每一个入口包括了它所关联的视图函数,直接传入了一个函数对象。 这就意味着需要在模块开始处导入视图函数。

但随着 Django 应用变得复杂,它的 URLconf 也在增长,并且维护这些导入可能使得管理变麻烦。 (对每个新的view函数,你不得不记住要导入它,并且采用这种方法会使导入语句将变得相当长。)可以通过导入 views 模块本身来避免这个麻烦。 下面例子的URLconf与前一个等价:

from django.conf.urls.defaults import *
**from mysite import views**

urlpatterns = patterns('',
  (r'^hello/$', **views.hello** ),
  (r'^time/$', **views.current_datetime** ),
  (r'^time/plus/(d{1,2})/$', **views.hours_ahead** ),
)

Django 还提供了另一种方法可以在 URLconf 中为某个特别的模式指定视图函数: 你可以传入一个包含模块名和函数名的字符串,而不是函数对象本身。 继续示例:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
  (r'^hello/$', **'mysite.views.hello'** ),
  (r'^time/$', **'mysite.views.current_datetime'** ),
  (r'^time/plus/(d{1,2})/$', **'mysite.views.hours_ahead'** ),
)

(注意视图名前后的引号。 应该使用带引号的 'mysite.views.current_datetime' 而不是 mysite.views.current_datetime 。)

使用这个技术,就不必导入视图函数了;Django 会在第一次需要它时根据字符串所描述的视图函数的名字和路径,导入合适的视图函数。

当使用字符串技术时,你可以采用更简化的方式:提取出一个公共视图前缀。 在我们的URLconf例子中,每个视图字符串的开始部分都是``\,造成重复输入。 我们可以把公共的前缀提取出来,作为第一个参数传给\ ``函数:

System Message: WARNING/2 (<string>, line 99); backlink

Inline literal start-string without end-string.

from django.conf.urls.defaults import *

urlpatterns = patterns(**'mysite.views'** ,
  (r'^hello/$', **'hello'** ),
  (r'^time/$', **'current_datetime'** ),
  (r'^time/plus/(d{1,2})/$', **'hours_ahead'** ),
)

注意既不要在前缀后面跟着一个点号("." ),也不要在视图字符串前面放一个点号。 Django 会自动处理它们。

牢记这两种方法,哪种更好一些呢? 这取决于你的个人编码习惯和需要。

字符串方法的好处如下:

    更紧凑,因为不需要你导入视图函数。

    如果你的视图函数存在于几个不同的 Python 模块的话,它可以使得 URLconf 更易读和管理。

函数对象方法的好处如下:

    更容易对视图函数进行包装(wrap)。 参见本章后面的《包装视图函数》一节。

    更 Pythonic,就是说,更符合 Python 的传统,如把函数当成对象传递。

两个方法都是有效的,甚至你可以在同一个 URLconf 中混用它们。 决定权在你。

Python 相关文章推荐
python算法学习之计数排序实例
Dec 18 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
python实现日志按天分割
Jul 22 Python
对于Python深浅拷贝的理解
Jul 29 Python
Python3 A*寻路算法实现方式
Dec 24 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
Python正则表达式如何匹配中文
May 27 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
Jul 07 Python
Python实现播放和录制声音的功能
Aug 12 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
python爬取新闻门户网站的示例
Apr 25 Python
Python max函数中key的用法及原理解析
Jun 26 Python
在Django的form中使用CSS进行设计的方法
Jul 18 #Python
在Django的视图中使用form对象的方法
Jul 18 #Python
详解Django中的form库的使用
Jul 18 #Python
在Django框架中编写Contact表单的教程
Jul 17 #Python
简单解析Django框架中的表单验证
Jul 17 #Python
改进Django中的表单的简单方法
Jul 17 #Python
Python的Django框架中的表单处理示例
Jul 17 #Python
You might like
不错的一篇面向对象的PHP开发模式(简写版)
2007/03/15 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
Bootstrap基础学习
2015/06/16 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
js实现聊天对话框
2020/02/08 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
python爬取淘宝商品销量信息
2018/11/16 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
Python帮你识破双11的套路
2019/11/11 Python
Python super()方法原理详解
2020/03/31 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
法学专业毕业生自荐信范文
2013/12/18 职场文书
仓管岗位职责范本
2014/02/08 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
冰峪沟导游词
2015/02/09 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
python 爬取豆瓣网页的示例
2021/04/13 Python