使用 jquery Ajax 在 django 中删除 Model 对象

Posted

技术标签:

【中文标题】使用 jquery Ajax 在 django 中删除 Model 对象【英文标题】:Delete Model object in django Using jquery Ajax 【发布时间】:2017-04-13 04:35:50 【问题描述】:

很难使用 jquery/ajax 删除对象。我已经实现了一个表,其中的行包含 Appointment 模型中的对象列表。每行都有一个删除按钮。

对象表的模板是:

<table class="table table-striped table-bordered table-list">
    <thead>
     <tr>
        <th><em class="fa fa-cog"></em></th>
        <th class="hidden-xs">ID</th>
        <th>Patient Name</th>
        <th>Day</th>
        <th>Time</th>
        <th>Location</th>
     </tr>
    </thead>
    <tbody>
        % for appointment in appointments %
            <tr>
                <td align="center">
                    <button class="delete_button" id=" appointment.id ">
                        <em class="fa fa-trash"></em>
                    </button>
                </td>
                  <td>1</td>
                <td class="hidden" id="appointment_id"> appointment.id </td>
                <td> appointment.patient </td>
                <td> appointment.day </td>
                <td> appointment.time </td>
                <td>% if appointment.clinic %
                       appointment.clinic 
                      % endif %
                      % if appointment.hospital %
                       appointment.hospital 
                      % endif %
                </td>
            </tr>
        % endfor %
    </tbody>
</table>

Javascript 如下:

$(document).ready(function()
    $(".delete_button").click(function() 
        var id = $(this).attr('id');
        $.ajax(
            url: "% url 'deleteappointment' %",
            data:  'id' : id ,
            beforeSend: function(xhr) 
                xhr.setRequestHeader("X-CSRFToken", % csrf_token % );
            ,
            success: function(response)
            
        );
    );
);

当我点击删除按钮时什么都没有发生。我在这里做错了什么?

编辑 2 这是在 ajax 请求中发生的: 控制台中的语法错误:

beforeSend: function(xhr) 
      xhr.setRequestHeader("X-CSRFToken", <input type='hidden' name='csrfmiddlewaretoken' value='LUgmNbcWfkIR9KpLi7lzsn0QOk' /> );
                ,

如何防止 csrftoken 标签在此处呈现整个输入字段?

【问题讨论】:

控制台有什么错误?? 我想它是因为你没有声明它是一个发布请求,但没有更多信息很难说,如果是,那么使用 $.post 而不是 $.ajax @Manu csrf 令牌标头中的未捕获语法错误。 django 的 % csrf_token % 在标题中提供了一个输入字段。 在标头中发现错误:标头看起来像这样: beforeSend: function(xhr) xhr.setRequestHeader("X-CSRFToken", ); , 【参考方案1】:

您正在使用% csrf_token % 模板标签,该标签以html 格式插入表单的令牌。您可以使用其他类型的括号(引号内)

xhr.setRequestHeader("X-CSRFToken", % csrf_token % );

应该是

xhr.setRequestHeader("X-CSRFToken", " csrf_token ");

【讨论】:

已经这样做了。现在得到这个:“未捕获的 ReferenceError:l3ts9IEg7JfopQmeb0xiGq5AgPoHFVLjaK.. 未定义。”随机字符串是 csrf 令牌。 您是否忘记了标签周围的引号?...尽管这即将成为一个单独的问题.. 将 % csrf_token % 替换为 " csrf_token " 效果很好!

以上是关于使用 jquery Ajax 在 django 中删除 Model 对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery、ajax 和 django 定期刷新页面

如何在 Django 模板中使用 Jquery/Ajax 正确刷新 div

使用 jquery Ajax 在 django 中删除 Model 对象

django - ajax - 从 jquery/ajax 调用 python 函数

在 django 中使用 jQuery 预览 Ajax 头像

Django 在 JQuery AJAX 请求中说 is_ajax 是错误的