首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django操作的默认参数

Django操作的默认参数
EN

Stack Overflow用户
提问于 2008-10-24 18:12:00
回答 2查看 3.5K关注 0票数 3

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

代码语言:javascript
运行
复制
urlpatterns = patterns('',(r'^test/(?P<name>.*)?$','myview.displayName'))

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

我曾尝试将urlpattern中的第三个参数设置为包含‘的字典,并在该方法上为name参数设置了默认值,但都没有成功。name参数似乎始终为None。如果我可以设置一个默认值,我真的不想为None编写一个检查。

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

代码语言:javascript
运行
复制
def displayName(request,name='Steve'):
      return HttpResponse(name)
#i also tried

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

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

有什么想法吗?

EN

Stack Overflow用户

回答已采纳

发布于 2008-10-24 19:39:05

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

代码语言:javascript
运行
复制
>>> url.match("test/").groupdict()
{'name': None}

这意味着当视图被调用时,使用类似于下面的内容:

代码语言:javascript
运行
复制
view(request, *groups, **groupdict)

相当于:

代码语言:javascript
运行
复制
view(request, name = None)

对于'test/',表示该名称未分配,而不是未分配。

这给您留下了两个选择。您可以:

在视图代码中显式地检查None,这是一种hackish.

  • Rewrite
  1. 规则,使名称捕获不是可选的,并在没有提供名称时引入第二个要捕获的规则。

例如:

代码语言:javascript
运行
复制
urlpatterns = patterns('',
    (r'^test/(?P<name>.+)$','myview.displayName'), # note the '+' instead of the '*'
    (r'^test/$','myview.displayName'),
)

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

票数 9
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/234695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档