我正在使用Django的URLconf,我将收到的URL是/?code=authenticationcode 我想使用来匹配该URL r'^\?code=(?P<code>.*)$',但它不起作用。
/?code=authenticationcode
r'^\?code=(?P<code>.*)$'
然后我发现这是“?”的问题。 因为我尝试/aaa?aaa使用r'aaa\?aaa' r'aaa\\?aaa'even 进行匹配r'aaa.*aaa',但都失败了,但是当它是“ +”或任何其他字符时,它可以工作。 如何匹配“?”,有什么特别之处吗?
/aaa?aaa
r'aaa\?aaa' r'aaa\\?aaa'
r'aaa.*aaa'
>>> s="aaa?aaa" >>> import re >>> re.findall(r'aaa\?aaa', s) ['aaa?aaa']
/aaa?aaa你的网址内部不匹配的原因是因为?开始新的GET查询。
因此,URL的可匹配部分只能达到第一个“ aaa”。其余的“?aaa”是一个新的查询字符串,由“?”分隔 标记,其中包含作为“ GET”参数传递的变量“ aaa”。
你可以在此处对变量进行编码,然后再将其放入URL。的编码形式?为%3F。
你也不应该完全匹配GET查询,例如/?code=authenticationcode使用正则表达式。相反,请/使用来匹配你的网址r'^$'。Django会将变量code作为GET参数传递给request对象,你可以使用在视图中获取该对象request.GET.get('code')。
/
r'^$'
code
request
request.GET.get('code')