您好我总是与Regex混淆,我不理解对其他帮助主题的回应。
基本上我的问题是,我可以合并
r'^input/?$'
和
r'^input/index.html?$'
进入这个?
r'^input(/(index.html?)?)?$'
在Django中,我收到此错误:
input() takes exactly 1 argument (3 given)
它只在正确匹配时给出错误,所以也许它不是正则表达式问题?
答案 0 :(得分:1)
就个人而言,我宁愿不合并两个正则表达式。我认为有两个网址模式,
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()
()
有关详细信息,请参阅Regular Expression Advanced Syntax Reference页面。
答案 1 :(得分:0)
如果您在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/