Python的Django框架中URLconf相关的一些技巧整理
提供视图配置选项
如果你发布一个Django的应用,你的用户可能会希望配置上能有些自由度。这种情况下,为你认为用户可能希望改变的配置选项添加一些钩子到你的视图中会是一个很好的主意。你可以用额外URLconf参数实现。
一个应用中比较常见的可供配置代码是模板名字:
defmy_view(request,template_name): var=do_something() returnrender_to_response(template_name,{'var':var})
了解捕捉值和额外参数之间的优先级额外的选项
当冲突出现的时候,额外URLconf参数优先于捕捉值。也就是说,如果URLconf捕捉到的一个命名组变量和一个额外URLconf参数包含的变量同名时,额外URLconf参数的值会被使用。
例如,下面这个URLconf:
fromdjango.conf.urls.defaultsimport* frommysiteimportviews urlpatterns=patterns('', (r'^mydata/(?P<id>\d+)/$',views.my_view,{'id':3}), )
这里,正则表达式和额外字典都包含了一个id。硬编码的(额外字典的)id将优先使用。就是说任何请求(比如,/mydata/2/或者/mydata/432432/)都会作id设置为3对待,不管URL里面能捕捉到什么样的值。
聪明的读者会发现在这种情况下,在正则表达式里面写上捕捉是浪费时间的,因为id的值总是会被字典中的值覆盖。没错,我们说这个的目的只是为了让你不要犯这样的错误。
调试模式中的特例
说到动态构建urlpatterns,你可能想利用这一技术,在Django的调试模式下修改URLconf的行为。为了做到这一点,只要在运行时检查DEBUG配置项的值即可,如:
fromdjango.confimportsettings fromdjango.conf.urls.defaultsimport* frommysiteimportviews urlpatterns=patterns('', (r'^$',views.homepage), (r'^(\d{4})/([a-z]{3})/$',views.archive_month), ) ifsettings.DEBUG: urlpatterns+=patterns('', (r'^debuginfo/$',views.debug), )
在这个例子中,URL链接/debuginfo/只在你的DEBUG配置项设为True时才有效。