看下这个 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 中混用它们。 决定权在你。
本文向大家介绍Django中传递参数到URLconf的视图函数中的方法,包括了Django中传递参数到URLconf的视图函数中的方法的使用技巧和注意事项,需要的朋友参考一下 有时你会发现你写的视图函数是十分类似的,只有一点点的不同。 比如说,你有两个视图,它们的内容是一致的,除了它们所用的模板不太一样: 我们在这代码里面做了重复的工作,不够简练。 起初你可能会想,通过对两个URL都使用同样的视图
本文向大家介绍在Django的URLconf中使用命名组的方法,包括了在Django的URLconf中使用命名组的方法的使用技巧和注意事项,需要的朋友参考一下 在我们想要捕获的URL部分上加上小括号,Django 会将捕获的文本作为位置参数传递给视图函数。 在更高级的用法中,还可以使用 命名 正则表达式组来捕获URL,并且将其作为关键字参数传给视图。 一个 Python 函数可以使用关键字参数或位
本文向大家介绍Django的URLconf中使用缺省视图参数的方法,包括了Django的URLconf中使用缺省视图参数的方法的使用技巧和注意事项,需要的朋友参考一下 一个方便的特性是你可以给一个视图指定默认的参数。 这样,当没有给这个参数赋值的时候将会使用默认的值。 例子: 在这里,两个URL表达式都指向了同一个视图 views.page ,但是第一个表达式没有传递任何参数。 如果匹配到了第一个
本文向大家介绍Django中URLconf和include()的协同工作方法,包括了Django中URLconf和include()的协同工作方法的使用技巧和注意事项,需要的朋友参考一下 捕获的参数如何和include()协同工作 一个被包含的URLconf接收任何来自parent URLconfs的被捕获的参数,比如: 在这个例子中,被捕获的 username 变量将传递给被包含的 URLcon
本文向大家介绍在Django中创建URLconf相关的通用视图的方法,包括了在Django中创建URLconf相关的通用视图的方法的使用技巧和注意事项,需要的朋友参考一下 抽取出我们代码中共性的东西是一个很好的编程习惯。 比如,像以下的两个Python函数: 我们可以把问候语提取出来变成一个参数: 通过使用额外的URLconf参数,你可以把同样的思想应用到Django的视图中。 了解这个以后,你可
本文向大家介绍在Django的URLconf中使用多个视图前缀的方法,包括了在Django的URLconf中使用多个视图前缀的方法的使用技巧和注意事项,需要的朋友参考一下 在实践中,如果你使用字符串技术,特别是当你的 URLconf 中没有一个公共前缀时,你最终可能混合视图。 然而,你仍然可以利用视图前缀的简便方式来减少重复。 只要增加多个 patterns() 对象,象这样: 旧的: 新的: 整