Django使用确认弹出窗口和多个成功URL删除CBV

时间:2018-02-19 10:18:57

标签: ajax django django-forms django-templates django-views

在我的情况下,可以从以下位置删除实例模型:

  • ListView继承了View
  • 一个DetailView继承了View

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

  • get函数调用' confirm_delete'模板。相反,我希望弹出/模态出现,如果在模态中单击delete将删除对象
  • 如果delete操作在ListView上,删除后用户将保留在ListView上,ListView内容将更新

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

-

所以我想知道如何在删除时执行Ajax调用,如何根据我在操作之前的位置获取条件成功URL。

1 个答案:

答案 0 :(得分:4)

对于DetailView,您只需使用以下表单:

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

  <button onclick="return confirm('Are you sure?');">Delete</button>
</form>

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

对于ListView,只需向POST发送DeleteView请求,并在成功时重新加载当前页面以更新ListView。您如何发送AJAX请求取决于您是否使用任何库,但使用jQuery可以按如下方式完成:

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

注意:不要忘记包含csrf_token以使AJAX请求生效。有关详细信息,请参阅docs