2012-05-03 38 views
0

目前,我有一個網址無法正常工作,因爲我無法與之匹敵。我在我的urls.py以下條目你能幫我用Django的URL正則表達式嗎?

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>位置包含大寫,小寫和空格。

Ex。

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

我該如何解決這個問題?任何幫助表示讚賞!

+1

什麼你已經粘貼了'URL(...)'似乎被搞砸了。我不確定哪部分是正則表達式,哪部分不是。是否在'(ΔP \ d {4})>'正則表達式結束?之後有空格。 – alan

+0

@alan看來它弄亂當我粘貼它。感謝您的注意,修復! – marcoamorales

+0

在正則表達式的末尾是否真的有一個'>'? – alan

回答

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

+?具有非貪婪匹配,意味着.+?將每一個字符匹配,直到下一個斜線。

+0

我打算在具有特殊字符就好了,所以這個完美的作品,謝謝! – marcoamorales

2

\S應該匹配所有的非空白字符,但%20在你的例子編碼空間。我不能肯定地說,但我猜在GET請求到達url處理程序之前,空白字符已經被解碼了。你可以通過測試一個沒有空格的名字來確認。

如果是這樣,你可以通過使用捕獲組像(?P<nombre>[^/]+)代替(「一切是不是正斜槓」)解決它的問題。

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

+0

正則表達式允許'\ S' ==>非空白字符,'%'是非空白字符。 – stema

+0

我改變了我的答案,請檢查它。 – Alexander

+0

這工作正常,但由於我打算使用像á這樣的特殊字符,我會使用@ stema的答案。謝謝! – marcoamorales