ajax - Django 删除带有确认弹出窗口和多个成功 url 的 CBV

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

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

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

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

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

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

--

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

最佳答案

对于 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 可以简单地向 DeleteView 发送一个 POST 请求,成功后重新加载当前页面以更新 ListView 。如何发送 AJAX 请求取决于您是否使用任何库,但使用 jQuery 可以按如下方式完成:

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

注意:不要忘记包含 csrf_token 以使 AJAX 请求正常工作。查看docs获取更多信息。

关于ajax - Django 删除带有确认弹出窗口和多个成功 url 的 CBV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48863917/

相关文章:

javascript - $.get() 请求不适用于 Django

php - MySQL 存储过程无法从 ajax/php 运行

ajax - AngularJS 应用托管在 Github 页面 (gh-pages) ajax 爬取

python - 如何在模板中显示计算数据

django - 如何以 12 小时时间而不是军用 24 小时显示 Django 时间

python - url 中没有 pk 的 Django UpdateView

django - 如果在 Django 表单中选中另一个字段,则将字段设为必需

django - 值错误 : Cannot assign : must be an instance

jquery - 从外部文件 jQuery 加载数据

javascript - AJAX获取: anonymous function not being called upon success