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


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

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

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


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

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

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

有什么想法吗?

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

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

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

<*>

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

有什么想法吗?

, 'myview.displayName', dict(name='Test') ) )

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

有什么想法吗?

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

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

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

<*>

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

有什么想法吗?

有帮助吗?

解决方案

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

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

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

view(request, *groups, **groupdict)

相当于:

view(request, name = None)

表示'test /',表示该名称被指定为None而不是未指定。

这为您提供了两个选项。你可以:

  1. 在视图代码中明确检查无,这是一种hackish。
  2. 重写url dispatch规则以使名称捕获非可选,并在没有提供名称时引入第二个规则来捕获。
  3. 例如:

    urlpatterns = patterns('',
        (r'^test/(?P<name>.+)
    
    

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

    ,'myview.displayName'), # note the '+' instead of the '*' (r'^test/

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

    ,'myview.displayName'), )

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top