Django URLresolver,可选值

时间:2014-09-23 15:19:08

标签: django django-urls

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

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

我希望合并两者,方法是说methods_type是可选的(通过在我的视图中指定一个默认值的参数)。 只需添加一个?是否可行?在正则表达式?起初我是这么想的,但是我无法让它发挥作用。

有人有想法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以编写正则表达式以捕获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'
    ...

或者你坚持使用已有的两个独立规则。