2012-05-03 12 views
0

現在、私のURLの1つが一致しないため、正しく動作していません。私は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>内にあるように見え、私のurls.pyに次のエントリを持っています。私が使用しているURLには、<nombre>の大文字、小文字およびスペースが含まれています。

Ex。

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

どうすればこの問題を解決できますか?どんな助けもありがとう!

+1

Sつまらない。どの部分が正規表現であり、どの部分が正規表現ではないか分かりません。正規表現は '(?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), 
) 

しかし、それは、\では動作しませんあなたは `URL(...)`に思えるのために貼り付けている何

+0

現時点で正規表現では '\ S' ==>は空白文字ではなく、'% 'は空白文字ではありません。 – stema

+0

私は自分の答えを変更しました。それを確認してください。 – Alexander

+0

これは問題なく動作しますが、áのような特殊文字の使用を計画しているので、@ stemaの答えを使用します。ありがとう! – marcoamorales

関連する問題