0

したがって、次のようなURLに応答する必要があるdjangoアプリがあるとします: http: //127.0.0.1 :8000 / food%20log / 4 /up/ 。元のパラメータは「フードログ」ですが、URLに含まれている場合は、スペースを%20に置き換える必要がありました。これでリンクがクリックされ、urls.pyに戻ってきます。

urlpatterns = patterns('',
(r'^(?P<content_type>\w+)/(?P<object_id>\d+)/(?P<direction>up|down|clear)/$', process_vote),

...)

そのため、パラメータを正しく認識できないようです。これは、スペースを含むcontent_typeを使用する前の関数型コードです。システムの残りの部分全体でそのcontent_typeの名前からスペースを削除できないと仮定した場合、「food%20log」が実際には「foodlog」であることをurlpatterns関数に認識させるにはどうすればよいですか。有効なものとして認識されるように?

基本的に、urlpatternsによって処理される前に文字列を前処理したいのですが、それを行う方法と場所がわかりません。助けてくれてありがとう。

4

1 に答える 1

1

reモジュールのPythonマニュアルによると:

LOCALEフラグとUNICODEフラグが指定されていない場合、任意の英数字とアンダースコアに一致します。これは、セット[a-zA-Z0-9_]と同等です。LOCALEを使用すると、セット[0-9_]に加えて、現在のロケールで英数字として定義されている文字と一致します。UNICODEが設定されている場合、これは文字[0-9_]に加えて、Unicode文字プロパティデータベースで英数字として分類されているものと一致します。

したがって、\ wに加えて、正規表現にスペースを含めることができます。

urlpatterns = patterns('',
(r'^(?P<content_type>[\w ]+)/(?P<object_id>\d+)/(?P<direction>up|down|clear)/$',     process_vote),
于 2011-09-01T19:36:44.667 に答える