在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之入门(二)基本数据类型
May 25 Python
Python实现的ini文件操作类分享
Nov 20 Python
Python文件处理
Feb 29 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
python使用knn实现特征向量分类
Dec 26 Python
Python地图绘制实操详解
Mar 04 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
Python中使用gflags实例及原理解析
Dec 13 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
使用 MySQL Date/Time 类型
2008/03/26 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
职业生涯规划设计步骤
2014/01/12 职场文书
物理学专业自荐信
2014/06/11 职场文书
师范生见习报告范文
2014/11/03 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
Nginx跨域问题解析与解决
2022/08/05 Servers