0

目前,我的一个网址无法正常工作,因为我无法匹配它。我的 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>. 我使用的 url 包含大写、小写和空格<nombre>

前任。

http://127.0.0.1:8000/inventario/no_inventariado/nuevo/LUIS%20%20RICARDO%20DAVID%20P/XXXBX7399F11/7070/

我该如何解决这个问题?任何帮助表示赞赏!

4

3 回答 3

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'),$

+?进行非贪婪匹配,意味着将.+?匹配每个字符,直到下一个斜杠。

于 2012-05-03T20:23:05.863 回答
2

\S应该匹配所有非空白字符,但%20示例中的 s 是编码空格。我不能肯定地说,但我猜空格在 GET 请求到达 url 处理程序之前被解码。您可以通过使用不带空格的名称进行测试来确认这一点。

如果这是问题,您可以通过使用捕获组(?P<nombre>[^/]+)来解决它(“所有不是正斜杠的东西”)。

于 2012-05-03T20:23:54.127 回答
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

于 2012-05-03T20:25:04.913 回答