【问题标题】:django delete object using AJAX or javascript with confirmdjango 使用 AJAX 或带有确认的 javascript 删除对象
【发布时间】:2026-02-12 14:45:01
【问题描述】:

您好,我想使用 AJAX 或 JavaScript 删除 Django 对象,并在单击删除时显示确认消息,但我不知道如何完成 AJAX 请求。

views.py

def delete(request,id):
    try:
        inta = work.objects.get(pk=id)
        inta.delete()
    except:
        pass
    return HttpResponseRedirect(reverse('home'))

urls.py

url(r'^delete/(?P<id>\d+)/$',views.delete, name='delete')

html:

{& for app in apps &}
<p>{{ app.item0 }}</p>
<p>{{ app.item1 }}</p>
<p>{{ app.item2 }}</p>
<button  data-object-id="{{ app.id }}">remove</button>
{% endfor %}

$('button').on('click', function(){
    var confirmation = confirm("are you sure you want to remove the item?");
    if (confirmation) {
     // execute ajax
        alert('removed');
    }
})

【问题讨论】:

    标签: javascript python ajax django request


    【解决方案1】:

    还有更方便的 AJAX 代码编写方式:

    $('button').on('click', function(){
        let confirmation = confirm("are you sure you want to remove the item?");
        if (confirmation) {
            let object_id = $(this).attr('data-object-id');
            let url = `delete/${object_id}/`;
            $.ajax({
               url: "example.html/my/example",
               data: {
                   'csrfmiddlewaretoken': "{{ csrf_token }}"
               },
               type: "DELETE",
               dataType: "json"
             }).done(
                  function(){alert("Deleted");}
                ).fail(
                  function(){alert("Error");}
                ) 
           });
        }
    })
    

    【讨论】:

    • 我收到此错误禁止(CSRF 令牌丢失或不正确。):
    • 我忘记了数据中的 csrf 令牌。现在它应该可以工作了;)
    • 我更改了您的代码中的一些行,现在如果我尝试删除一些 itam,那么我会失败(警报错误)但该项目将其删除,我只能在此处刷新页面时看到sn-p: var object_id = $(this).attr('data-object-id');控制台.log(object_id); //var url = '删除/${object_id}/'; $.ajax({ url: 'delete/'+object_id+'/', data: { }, beforeSend: function(xhr) { xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}");跨度>
    【解决方案2】:

    假设

    • delete 视图不包括 DELETE 请求
    • javascript 代码包含在 HTML 中


    $('button').on('click', function(){
        let confirmation = confirm("are you sure you want to remove the item?");
        if (confirmation) {
            let object_id = $(this).attr('data-object-id');
            let url = `delete/${object_id}/`;
            $.delete(url, {csrfmiddlewaretoken: '{{ csrf_token }}'}, function(){
                    alert('removed');
            })
        }
    })
    

    如果 javascript 代码位于单独的文件中,您将不得不找到另一种方法来获取 csrf-token,可能来自页面某处的隐藏输入。

    【讨论】:

    • 但在删除对象之前我需要先同意确认消息 `var Confirm = confirm("您确定要删除该项目吗?"); `我现在很困惑
    • 您发布的代码已经处理了确认...无论如何我更新了答案以使其更清晰
    • 我现在尝试测试它,但如果我将代码放入 则无法工作,然后在 `let` 中显示错误,因为有红线。
    • @Mar 您可能使用的是旧版本的 JS。尝试用var替换所有let
    • 我现在接受错误:(index):679 Uncaught TypeError: $.delete is not a function at HTMLButtonElement. ((index):679) at HTMLButtonElement.dispatch (jquery-1.12. 4.min.js:3) 在 HTMLButtonElement.r.handle (jquery-1.12.4.min.js:3)