在我的urls.py文件中,我目前有以下解析器:
url(r'$', 'methodology_home')
url(r'^(?P<methodology_type\w+)/$', 'methodology_home')
我希望合并两者,方法是说methods_type是可选的(通过在我的视图中指定一个默认值的参数)。 只需添加一个?是否可行?在正则表达式?起初我是这么想的,但是我无法让它发挥作用。
有人有想法吗?
感谢。
答案 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'
...
或者你坚持使用已有的两个独立规则。