带有信息的 Django HTML POST 删除按钮

Posted

技术标签:

【中文标题】带有信息的 Django HTML POST 删除按钮【英文标题】:Django HTML POST delete button with information 【发布时间】:2018-01-27 17:59:45 【问题描述】:

我有一个包含电子邮件地址的表格,我需要从表格中删除电子邮件地址。该表格将在电子邮件地址旁边有删除按钮。

在初始页面加载时,我的视图将电子邮件地址发送到 Django 模板。当用户单击您要删除的电子邮件地址旁边的删除按钮时,我需要该按钮将相应电子邮件地址的信息一起发布,以便我的视图可以从数据库中删除正确的电子邮件地址。

我查看了提交按钮和 POST 信息,但 POST 通常通过发送输入数据来工作。在这种情况下,没有输入数据。这是模板中的代码:

        <tr>
            <td>% trans "Email" %</td>
            <td>% trans " " %</td>
        </tr>
        </thead>
        <tbody>
        % for licensed_user in licensed_users %
            <tr>
                <td> forloop.counter </td>
                <td> licensed_user.user.email </td>
                <td>
                    <form class="flex-container" method="post" action="% url 'reseller_dashboard' %" >
                        % csrf_token %
                        <div class="input-group">
                            <button name="delete" type="submit" class="btn btn-default">DELETE
                            </button>
                        </div>
                    </form>
                </td>
            </tr>

我需要在提交按钮时将licensed_user.user.email连同POST方法一起发送。

【问题讨论】:

【参考方案1】:

您可以设置一个隐藏的输入字段,然后在您的视图中处理删除。隐藏的输入看起来像:

<form class="flex-container" method="post" action="% url 'reseller_dashboard' %" > 
% csrf_token %
  <div class="input-group"> 
    <input type="hidden" name="email" value="licensed_user.user.email">
    <button name="delete" type="submit" class="btn btn-default">DELETE </button>
  </div> 
</form>

【讨论】:

【参考方案2】:

另外一种方式,也可以使用ajax方式;

% for licensed_user in licensed_users %
  <tr class="tr__ forloop.counter ">
    <td> forloop.counter </td>
    <td> licensed_user.user.email </td>
    <td><button data-email=" licensed_user.user.email "
                data-loop=" forloop.counter "
                class="btn btn-default delete-action">Delete</button>
    </td>
  </tr>
% endfor %

<script>
  $('.delete-action').click(function()
    var email = $(this).data('email');
    var loop = $(this).data('loop');

    $.ajax(
      type: "POST",
      url: "% url 'reseller_dashboard' %",
      data: 
        'csrfmiddlewaretoken': ' csrf_token ',
        'email': email,
        'delete': true
      ,
      success: function(message) 
        console.log(message);
        $('.tr__' + loop).remove(); // remove this single `<tr>`
      ,
      error: function(error) 
        console.log(error);
      
    );
  );
</script>

【讨论】:

以上是关于带有信息的 Django HTML POST 删除按钮的主要内容,如果未能解决你的问题,请参考以下文章

Django:编写一个视图以删除带有复选框的项目

Django HTML POST 参数导致 NoReverseMatch

带有 POST 参数的外部 django 重定向

django ajax POST 上的 405 错误

Django Post 模型视图示例

带有ajax和django post的csrf