Django删除带有确认弹出式窗口和多个成功URL的CBV

use*_*631 1 django ajax django-templates django-forms django-views

就我而言,可以从以下实例中删除实例模型:

  • ListView继承的View
  • DetailView继承的View

默认情况下,调用删除视图时:

  • get函数调用“ confirm_delete”模板。相反,我希望出现一个弹出窗口/模式,如果delete在模式中单击,则会删除该对象
  • 如果delete操作在ListView上,则删除后用户将保留在ListView上,并且ListView内容将被更新

  • 如果delete操作在DetailView上,则删除后用户将被重定向到ListView或其他页面(取决于其他规则)

-

所以我想知道如何在删除之前进行Ajax调用,如何在删除中包含条件成功URL,这取决于我在执行操作之前所处的位置。

ikk*_*kuh 5

对于DetailView您,您可以简单地使用如下形式:

<form action="{% url "app:delete" object.id %}" method="post">
  {% csrf_token %}

  <button onclick="return confirm('Are you sure?');">Delete</button>
</form>
Run Code Online (Sandbox Code Playgroud)

单击该按钮将打开一个确认对话框。如果用户单击OK该表单将被提交。这将删除对象并重定向到confirm_delete页面将被重定向的相同方式。

对于,ListView只需将POST请求发送到DeleteView,成功后就可以重新加载当前页面以更新ListView。发送AJAX请求的方式取决于您是否使用任何库,但是使用jQuery可以按以下步骤完成:

$.ajax('{% url "app:delete" object.id %}', {
    method: 'POST',
    success: function() {
        window.location.reload();
    },
});
Run Code Online (Sandbox Code Playgroud)

注意:不要忘了包含csrf_tokenAJAX请求才能正常工作。有关更多信息,请参阅文档