gpt4 book ai didi

python - Django 操作的默认参数

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:32 24 4
gpt4 key购买 nike

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


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

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

我曾尝试将 urlpatterns 中的第三个参数设置为包含 ' 的字典,并在该方法上为名称参数指定默认值,但均无效。名称参数似乎总是无。如果我可以设置默认值,我真的不想编写 None 检查代码。

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


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

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

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

有什么想法吗?

最佳答案

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

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

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

view(request, *groups, **groupdict)

相当于:

view(request, name = None)

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

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

  1. 在有点 hackish 的 View 代码中明确检查 None。
  2. 重写 url 调度规则,使名称捕获成为非可选的,并引入第二条规则以在未提供名称时进行捕获。

例如:

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

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

关于python - Django 操作的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/234695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com