2017-10-13 4 views
1

私はurls.pyでURLがあります。があり来るより多くの `/`私は、URLを要求したとき、 `?`の前で

urlpatterns = [ 
    ... 
    url(r'^delete_server_snapshot??(?P<snapshot_server_id>\[0-9a-z\-]+)/', app_admin_views.delete_server_snapshot), # here 
    ... 

をそして、私はそれを要求する場合、テンプレートにあります:

<td><a href="/app_admin/delete_server_snapshot??{{ snapshot_server.id }}/" type="button" class="btn-de">Delete</a></td> 

しかし、私は<a>タグをクリックすると、エラーが出たとき、/よりは??の目の前にあっています:

enter image description here

要求URL:

Request URL: http://localhost:8001/app_admin/delete_server_snapshot/??70e6e179-6269-445c-bd6a-cd98e55b1bdb/ 
+0

なぜ正規表現で '\ ['を使用していますか? '[' 'あなたは文字クラス*を無効にしました。それはあなたが何を意味すると思うかを意味するものではありません。 –

+0

@MartijnPieters使い方は?私は[0-9a-z \ - ]を試しました+まだ私のために動作しません。 – 244boy

+0

私は '?'が何とかurlパターンのリバーサを混乱させているのではないかと疑います。最初にURLに '?'があるのはなぜですか?それは驚くべき追加のようだ。 –

答えて

2

は、あなたのURLパターン、フルストップに疑問符を入れないでください。 URLの?<query string>部分はであり、決してというURLパターンで使用されています。代わりにリクエストオブジェクトを介してどのクエリパラメータにもアクセスでき、URLの照合に使用することはできません。 What the URLconf searches against sectionから

のURLconfは、通常のPython文字列として、要求されたURLに対して検索します。これには、GETまたはPOSTパラメータ、またはドメイン名は含まれません。

GETパラメータは、クエリ文字列から来ており、すべてが?の後にあります。

あなたが合うようにURLの一部となるようにsnapshot_server_id識別子を使用する場合は、完全に疑問符を削除します。

url(r'^delete_server_snapshot(?P<snapshot_server_id>[0-9a-z\-]+)/', app_admin_views.delete_server_snapshot) 

あなたはsnapshotとUUIDの間に1つを必要とする場合は、区切り文字として/を使用することができますまたは任意の他のvalid URL path characterである。

?文字は、DjangoにURLパスがその場所で終わり、生成されたURLのパスの末尾に/が挿入されたことを伝えます。

+0

は、あなたの答えは私がDjangoのurlpatternsで '?'文字関数を教えて、私は '' ??を交換_' 'あまりにも私の作品を使用、ありがとうございました。 – 244boy

関連する問題