16

Djangoのジェネリッククラスベースのビューに「キャンセル」ボタンを追加する最良の方法は何ですか?

success_url以下の例では、キャンセル ボタンでオブジェクトを削除せずに移動できるようにしたいと考えています。<input type="submit" name="cancel" value="Cancel" />テンプレートにボタンを追加してみました。クラスの post メソッドをオーバーライドすることで、このボタンが押されたかどうかを検出できますがAuthorDelete、そこからリダイレクトする方法がわかりません。

例 myapp/views.py:

from django.views.generic.edit import DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Author

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy('author-list')

    def post(self, request, *args, **kwargs):
        if request.POST["cancel"]:
            return ### return what? Can I redirect from here?
        else:
            return super(AuthorDelete, self).post(request, *args, **kwargs)

例 myapp/author_confirm_delete.html:

<form action="" method="post">{% csrf_token %}
    <p>Are you sure you want to delete "{{ object }}"?</p>
    <input type="submit" value="Confirm" />
    <input type="submit" name="cancel" value="Cancel" /> 
</form>

(ドキュメントから改作された例)

4

5 に答える 5

10

CBV を使用している場合viewは、テンプレートから直接アクセスできます

<a href="{{ view.get_success_url }}" class="btn btn-default">Cancel</a>

注: サブクラス化されている場合は、getter を介してアクセスする必要があります。

これはContextMixin docsに記載されています

すべてのクラスベースのジェネリック ビューのテンプレート コンテキストにはview 、View インスタンスを指す変数が含まれています。

于 2017-05-25T13:39:49.883 に答える
-1

get_success_url も必要ですか?

キャンセル

あなたが望む他のURLに行きますか?

于 2019-02-12T15:40:53.780 に答える