3

私はDjangoを使用していますが、ユーザーに本当に何かを削除したいことを確認してもらいたいです。私は純粋なDjangoソリューションを検討しています(Javascriptの確認はありません)。私の考えによれば、「はい」と「いいえ」のボタンを含む新しいページを作成できます。ユーザーが「はい」を押すと、私のサイトは続行し、データベースからオブジェクトを削除します。Javascriptを使用せずに削除を行う正しい方法ですか?あなたが私だったら、どのように機能を実装しますか?

4

2 に答える 2

5

Djangoのビルトインを使用します。DeleteViewこれにより、HTTPリクエストの確認ページが表示され、HTTPGETリクエストの削除が実行されますPOST

ドキュメントはこの例を示しています:

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')

SingleObjectMixinビューが削除するオブジェクトを見つける方法をカスタマイズする方法(デフォルトでは、と呼ばれるURLキーワード引数を検索する方法pk)を説明するドキュメントと、TemplateResponseMixin使用されるテンプレートをカスタマイズする方法を説明するドキュメントを読むことをお勧めします。 (デフォルトは'myapp/author_check_delete.html')。

これは、基本的な操作(単一のモデルインスタンスのページの表示、モデルインスタンスのリストの表示、編集、削除などの処理)を非常に迅速かつ簡単に実装できる多数のクラスベースの汎用ビューの1つにすぎません。

後でJavaScriptでこれを強化したい場合は、削除確認ページへのリンクを検出し(クラスまたは特定のURLを探すことによって)、確認ダイアログをポップアップして送信するクリックハンドラーを追加する控えめなJSをいつでも作成できます。POSTリンクのhref属性のURLへのリクエスト。request.is_ajax()また、ビューを少し変更して、がのときにJSONオブジェクトを返すようにする必要がありTrueます。これにより、JSは、削除が成功したか失敗したかを認識できます。これには、から継承されたメソッドの1つをオーバーライドすることが含まれる可能性がありますDeletionMixin

于 2012-09-07T07:24:37.297 に答える
4

いいですね。私が数回行ったことは、アプリケーションのどこでも使用できる確認テンプレートを作成することです。

{% extends 'base.html' %}

{% block content %}

    <div class="confirmation-box">
        <p>{{ message }}</p>
        <div>
            <a href="{{ prev_link }}">Cancel</a>
            <form action="{{ action_link }}" method="post">
                <input type="hidden" name="next" value="{{ prev_link }}" />
                <input type="submit" value="Send" />
            </form>
        </div>
    </div>

{% endblock %}

あなたはそれに渡します:

  • ユーザーへの確認メッセージ(message
  • 現在のページのURL(prev_link
  • アクションを実行するために呼び出す必要のあるURL(action_link

ユーザーがアクションをキャンセルすると、元のページに戻ります。

ユーザーが確認すると、prev_linkは非表示パラメーターとして渡されるため、ビューはアクションの実行後にユーザーを元のページにリダイレクトできます(ただし、これはもちろん完全にオプションです)。

これはあなたがあなたの質問で提案したこととほとんど同じです。

于 2012-09-07T07:32:17.523 に答える