9

私のURLconfには次のパターンが含まれています:

url(r'^accounts/logout/$','django.contrib.auth.views.logout', name="logout"),

そして、私は次のようなURLタグを持つテンプレートでそれを逆にしようとしています:

<a href="{% url logout next_page=request.path %}">logout</a>

しかし、私は次のエラーを受け取り続けます:

Reverse for 'logout' with arguments '()' and keyword arguments '{'next_page': u'/first-page/child/'}' not found

django.contrib.auth.views.logoutオプションnext_pageパラメータを取ることになっていると思いました。明らかな何かが欠けていることは確かですが、それが何であるかはわかりません。

4

2 に答える 2

7

はい、そうです、django.contrib.auth.views.logout はオプションの「next_page」パラメーターを受け入れますが、「url」タグはビューではなく urlconf パターンに一致することを忘れないでください。またはビューのパラメーターではありません。したがって、これは、上記のパターンの正規表現で「next_page」を名前付きグループにする必要があることを示唆していますが、これは可能ですが、リダイレクトを処理する簡単な方法があります...

django.contrib.auth.views.logoutを見ると、「 next_page」パラメーターがない場合、ビューは request.GET または request.POST でキー「redirect_field_name」を使用して提供された URL にリダイレクトされることがわかります。デフォルトで "REDIRECT_FIELD_NAME" に設定されるパラメータで、デフォルトで文字列 "next" に設定されます。したがって、urlconf をそのままにしておくと、テンプレートで次のようなことができます。

<a href='{% url logout %}?next={{ request.path }}'>logout</a>
于 2009-09-03T00:29:57.533 に答える
5

基本的に、Django の URL ディスパッチャーは urlconf とその引数を見て、「この引数をどこに置くべきかわかりません」と言っています。

現在、その引数の URL パターンには場所がありません。

つまり、独自のパターンを記述した場合、または独自のビューから呼び出したがデフォルトの URL パターンからではなく、追加の引数を指定して django.contrib.auth.views.logout を呼び出すことができます。

これらの URL パターンのいずれかが機能する可能性があります (テストされていません)。

url(r'^accounts/logout/(?P<next_page>.*)?$','django.contrib.auth.views.logout', name="logout"),
url(r'^accounts/logout/$','django.contrib.auth.views.logout', kwargs={'next_page':None}, name="logout"),

それが役立つことを願っています!

于 2009-09-03T00:23:20.603 に答える