3

在正则表达式不匹配使用 django 的任何内容的情况下,有没有办法将默认参数传递给操作?


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

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

我尝试将 urlpatterns 中的第三个参数设置为包含 ' 的字典,并为 name 参数提供方法的默认值,但这些都不起作用。name 参数似乎总是无。如果我可以设置默认值,我真的不想对 None 进行检查。

澄清:这是我将其更改为的示例。


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

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

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

有任何想法吗?

4

2 回答 2

9

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

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

这意味着当视图被调用时,使用我期望的类似于下面的东西:

view(request, *groups, **groupdict)

这相当于:

view(request, name = None)

对于 'test/',意味着该名称被分配为 None 而不是未分配。

这使您有两个选择。你可以:

  1. 在视图代码中明确检查 None ,这有点骇人听闻。
  2. 重写 url 调度规则以使名称捕获非可选,并引入第二条规则以在未提供名称时进行捕获。

例如:

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

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

于 2008-10-24T19:39:04.607 回答
0

以为你可以def displayName(request, name=defaultObj);这就是我过去所做的,至少。您将默认值设置为什么?

于 2008-10-24T18:25:42.147 回答