Jak*_*ake 3 python django django-urls
在正则表达式与django没有匹配的情况下,有没有办法将默认参数传递给一个动作?
urlpatterns = patterns('',(r'^test/(?P<name>.*)?$','myview.displayName'))
#myview.py
def displayName(request,name):
# write name to response or something
Run Code Online (Sandbox Code Playgroud)
我已经尝试将urlpatterns中的第三个参数设置为包含'并且为name方法提供该方法的默认值的字典,但没有一个工作.name参数似乎总是为None.如果我可以设置默认值,我真的不想为None编码.
澄清:这是我正在改变它的一个例子.
def displayName(request,name='Steve'):
return HttpResponse(name)
#i also tried
urlpatterns = patterns('',
(r'^test/(?P<name>.*)?$',
'myview.displayName',
dict(name='Test')
)
)
Run Code Online (Sandbox Code Playgroud)
当我将浏览器指向视图时,它会显示文本"无"
有任何想法吗?
问题是当模式与'test /'匹配时,正则表达式捕获的groupdict包含映射'name'=> None:
>>> url.match("test/").groupdict()
{'name': None}
Run Code Online (Sandbox Code Playgroud)
这意味着在调用视图时,使用我期望的类似于下面的内容:
view(request, *groups, **groupdict)
Run Code Online (Sandbox Code Playgroud)
这相当于:
view(request, name = None)
Run Code Online (Sandbox Code Playgroud)
对于'test /',意味着名称被指定为None而不是未指定.
这有两个选择.您可以:
例如:
urlpatterns = patterns('',
(r'^test/(?P<name>.+)$','myview.displayName'), # note the '+' instead of the '*'
(r'^test/$','myview.displayName'),
)
Run Code Online (Sandbox Code Playgroud)
在采用第二种方法时,您可以简单地调用没有捕获模式的方法,让python处理默认参数,或者您可以调用委托的不同视图.
归档时间: |
|
查看次数: |
2805 次 |
最近记录: |