【问题标题】:Django URLresolver, optional valueDjango URLresolver,可选值
【发布时间】:2014-09-23 15:19:07
【问题描述】:

在我的 urls.py 文件中,我目前有以下解析器:

url(r'$', 'methodology_home')
url(r'^(?P<methodology_type\w+)/$', 'methodology_home')

我希望通过说methodology_type 是可选的(并在我看来指定一个具有默认值的参数)来合并两者。 简单地添加一个是否可行?在正则表达式中?一开始我也是这么想的,但是我没能成功。

有人有想法吗?

谢谢。

【问题讨论】:

  • 个人认为,如果你合并模式,urls.py 会更清晰。

标签: django django-urls


【解决方案1】:

您可以编写一个正则表达式来捕获optional url paramater

url(r'^(?:(?P<methodology_type>\w+)/?)?$', 'methodology_home')

但是,这种方法的一个问题是,如果没有给出参数,您的视图将得到None。那是因为正则表达式实际上会匹配,并且组的值是None

import re

pattern = re.compile(r'^(?:(?P<methodology_type>\w+)/?)?$')
pattern.match('foo').groupdict()
>>> {'methodology_type': 'foo'}

pattern.match('').groupdict()
>>> {'methodology_type': None}

所以你要么在视图代码中处理它:

def my_view(request, methodology_type):
    methodology_type = methodology_type or 'default'
    ...

或者你坚持你已经拥有的两个分开的规则。

【讨论】:

  • 实际上,在我看来,它并没有起作用: def methods_home(request,methodology_type='default'): 如果我将其留空,methodology_type 不会采用默认值。
  • @user1058398 取而代之的是什么?
  • 它取“None”,它不认为我没有指定参数(并且不取默认值)。
猜你喜欢
  • 2018-11-21
  • 2015-02-04
  • 2012-06-01
  • 1970-01-01
  • 2016-01-24
  • 2011-06-21
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多