当前位置:  开发笔记 > 编程语言 > 正文

使用Django的操作的默认参数

如何解决《使用Django的操作的默认参数》经验,为你挑选了1个好方法。

在正则表达式与django没有匹配的情况下,有没有办法将默认参数传递给一个动作?

urlpatterns = patterns('',(r'^test/(?P.*)?$','myview.displayName'))

#myview.py
def displayName(request,name):
      # write name to response or something

我已经尝试将urlpatterns中的第三个参数设置为包含'并且为name方法提供该方法的默认值的字典,但没有一个工作.name参数似乎总是为None.如果我可以设置默认值,我真的不想为None编码.

澄清:这是我正在改变它的一个例子.

def displayName(request,name='Steve'):
      return HttpResponse(name)
#i also tried

urlpatterns = patterns('',
      (r'^test/(?P.*)?$',
        'myview.displayName',
        dict(name='Test')
      )
)

当我将浏览器指向视图时,它会显示文本"无"

有任何想法吗?



1> Aaron Maenpa..:

问题是当模式与'test /'匹配时,正则表达式捕获的groupdict包含映射'name'=> None:

>>> url.match("test/").groupdict()
{'name': None}

这意味着在调用视图时,使用我期望的类似于下面的内容:

view(request, *groups, **groupdict)

这相当于:

view(request, name = None)

对于'test /',意味着名称被指定为None而不是未指定.

这有两个选择.您可以:

    在视图代码中明确检查None是一种hackish.

    重写url dispatch规则以使名称捕获非可选,并引入第二个规则以在没有提供名称时捕获.

例如:

urlpatterns = patterns('',
    (r'^test/(?P.+)$','myview.displayName'), # note the '+' instead of the '*'
    (r'^test/$','myview.displayName'),
)

在采用第二种方法时,您可以简单地调用没有捕获模式的方法,让python处理默认参数,或者您可以调用委托的不同视图.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有