使用 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 对象的主要内容,如果未能解决你的问题,请参考以下文章
Python-Django 如何在管理员中使用 django-ajax-uploader?