目前,我的一个网址无法正常工作,因为我无法与之匹配。我在urls.py中有以下条目
url(r'no_inventariado/nuevo/(?P<nombre>\S+)/(?P<serie>[a-zA-Z0-9_]*)/(?P<extension>\d{4})', 'inventario.views.nuevo_resguardo', name='nuevo_resguardo'),$
问题似乎出现在<nombre>
中。我正在使用的网址包含<nombre>
点中的大写,小写和空格。
实施例
http://127.0.0.1:8000/inventario/no_inventariado/nuevo/LUIS%20%20RICARDO%20DAVID%20P/XXXBX7399F11/7070/
我该如何解决这个问题?任何帮助表示赞赏!
答案 0 :(得分:2)
如果您现在允许\S+
,则表示任何非空白字符,您现在想要添加空格,然后使用.+?
url(r'no_inventariado/nuevo/(?P<nombre>.+?)/(?P<serie>[a-zA-Z0-9_]*)/(?P<extension>\d{4})> 'inventario.views.nuevo_resguardo', name='nuevo_resguardo'),$
+?
有一个非贪婪的匹配,意味着.+?
将匹配每个字符,直到下一个斜线。
答案 1 :(得分:2)
\S
应匹配所有非空白字符,但示例中的%20
是编码空格。我不能肯定地说,但我猜测在GET请求到达url处理程序之前,空格正在被解码。您可以通过使用不带空格的名称进行测试来确认这一点。
如果这是问题,你可以通过使用像(?P<nombre>[^/]+)
这样的捕获组来解决它(“所有不是正斜杠的东西”)。
答案 2 :(得分:1)
我做了一个简单的测试,它可以在我的机器上运行:
from django.conf.urls import patterns, include, url
from django.http import HttpResponse
def hello(request, nombre):
return HttpResponse('Hello: '+nombre)
urlpatterns = patterns('',
url(r'^(?P<nombre>[a-zA-Z\s]*)/$', hello),
)
但它不适用于\ S