嗨,我一直对 Regex 感到困惑,我不明白对其他帮助线程的响应。
基本上我的问题是,我可以结合
r'^input/?$'
和
r'^input/index.html?$'
进入这个?
r'^input(/(index.html?)?)?$'
在 Django 中,我收到此错误:
input() takes exactly 1 argument (3 given)
它只在正确匹配时给出错误,所以也许这不是正则表达式问题?
就个人而言,我不希望将这两个正则表达式结合起来。我认为有两个网址模式,
url(r'^input/?$', input, name="input"),
url(r'^input/index.html?$', input),
比一个更具可读性。
但是,如果您确实想将两者结合起来,则可以使用非捕获括号:
r'^input(?:/(?:index.html?)?)?$'
一个简单的例子可能有助于解释:
>>> import re
>>> # first try the regex with capturing parentheses
>>> capturing=r'^input(/(index.html?)?)?$'
>>> # Django passes the two matching strings to the input view, causing the type error
>>> print re.match(capturing, "input/index.html").groups()
('/index.html', 'index.html')
>>> # repeat with non capturing parentheses
>>> non_capturing=r'^input(?:/(?:index.html?)?)?$'
>>> print re.match(non_capturing, "input/index.html").groups()
()
有关详细信息,请参阅正则表达式高级语法参考页面。
如果您在您的中使用它,urlpatterns
则不需要编写?
符号,因为之后的所有内容都可以在您的视图函数中解析。并且请求/input/index.html?param=2
将使用正则表达式正确处理r'^input/index.html$'
。然后在视图函数中,您可以获得如下参数:
def my_view(request):
param = request.GET.get('param', 'default_value')
在此处查找更多信息:https ://docs.djangoproject.com/en/1.9/topics/http/urls/