【问题标题】:Django using modals for deleting a userDjango使用模态删除用户
【发布时间】:2021-04-03 15:58:43
【问题描述】:

我想在 django 中删除带有模态的用户。我有一个删除功能,我不知道我应该如何返回模板。

views.py:

@login_required(login_url='admin_signin')
@admin_only
def admin_profiles_deletion(request, username):
    context = {}
    account = Account.objects.get(username=username)
    account.delete()
    messages.success(request, "User deleted!")
    context['account'] = account

    return render(request, 'HOW SHOULD I REFER MODALS HERE?', context)

我的urls.py 看起来:

path('admin/profile/<str:username>/delete', views.admin_profiles_deletion, name='admin_profiles_deletion'),

最后我的模板是:

<td class="text-center td-actions">
   <a href="{% url 'admin_view_profiles' account.username %}"><i class="la la-eye view"></i></a>
   <a href="{% url 'admin_profiles_general_edition' account.username %}"><i class="la la-edit edit"></i></a>
   <a href="{% url 'admin_profiles_deletion' account.username %}" data-toggle="modal" data-target="#deleteaccount">
       <i class="la la-close delete"></i>
   </a>
   <!-- Modal -->
   <div class="modal fade" id="deleteaccount" tabindex="-1" role="dialog" aria-labelledby="deleteaccountTitle" aria-hidden="true">
       <div class="modal-dialog modal-dialog-centered" role="document">
           <div class="modal-content">
               <div class="modal-header">
                   <h5 class="modal-title" id="deleteaccountTitle">Delete confirmation</h5>
                   <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                       <span aria-hidden="true">&times;</span>
                   </button>
               </div>
               <div class="modal-body">
                  <h5>Do you want to delete?</h5>
               </div>
               <div class="modal-footer">
                   <div class="col-6 text-left">
                      <div class="previous">
                          <form method="POST">
                               {% csrf_token %}
                               <input class="btn btn-danger btn-sm btn-block" type="submit" name="submit" value="Yes">
                          </form>
                      </div>
                   </div>
                   <div class="col-6 text-left">
                       <div class="next">
                           <a class="btn btn-info btn-sm btn-block" href="{% url 'accounts' %}">No</a>
                       </div>
                   </div>
               </div>
            </div>
        </div>
     </div>
 </td>

在模态中,我想点击YES,然后删除特定帐户。但我在使用模态时不知道该怎么做。

【问题讨论】:

  • 你想使用ajax(不刷新页面)吗?还是您只想返回用户列表?你得到什么错误?
  • 谢谢,我没有使用ajax。这就是我的 html 文件和urls.pyviews.py 中的所有内容。通过点击YES 回答我想删除特定用户(account.username)。

标签: django twitter-bootstrap django-templates bootstrap-modal


【解决方案1】:

试试这个。

from django.shortcuts import redirect
...
def admin_profiles_deletion(request, username):
    ...

    return redirect("/admin/profile/")

    # or to return to same (previous) page:
    return redirect(request.META['HTTP_REFERER'])

在您的模板中添加action 属性到您的表单

<form method="POST" action="{% url 'admin_profiles_deletion' account.username %}">
   {% csrf_token %}
   <input class="btn btn-danger btn-sm btn-block" type="submit" name="submit" value="Yes">
</form>

动态更新action属性

<a href="#" data-url="{% url 'admin_profiles_deletion' account.username %}" class="deleteaccount">
    <i class="la la-close delete"></i>
</a>

jQuery相比

<script>
$(document).ready(function() {
    $('a.deleteaccount').on( "click", function() {
       event.preventDefault();
       $('#deleteaccount form').attr('action', $(this).data("url"));
       $('#deleteaccount').modal('show');
    });
});
</script>

更新 - 工作示例http://jsfiddle.net/cbzmewhq/1/

&lt;span id="current_username"&gt;&lt;/span&gt;? 添加到您的模态正文中。

然后使用jQuery 在点击时添加您想要的文本: $('#deleteaccount #current_username').text($(this).data("username"));

以下是您的代码示例

...<!-- YOUR TABLE -->
<td class="text-center td-actions">
  <a href="{% url 'admin_view_profiles' account.username %}"><i class="la la-eye view"></i></a>
  <a href="{% url 'admin_profiles_general_edition' account.username %}"><i class="la la-edit edit"></i></a>
  <a href="#" data-username="{{ account.username }}" data-url="{% url 'admin_profiles_deletion' account.username %}" class="deleteaccount">
    <i class="la la-close delete"></i>
  </a>
</td>
....<!-- YOUR TABLE -->


<!-- Modal  OUT OF TABLE -->
<div class="modal fade" id="deleteaccount" tabindex="-1" role="dialog" aria-labelledby="deleteaccountTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
           <h5 class="modal-title" id="deleteaccountTitle">Delete confirmation</h5>
           <button type="button" class="close" data-dismiss="modal" aria-label="Close">
               <span aria-hidden="true">&times;</span>
           </button>
      </div>
      <div class="modal-body">
        <!-- ADD SPAN TO ADD USERNAME dynamically -->
        <h5>Do you want to delete <span id="current_username"></span>?</h5>
      </div>
      <div class="modal-footer">
        <div class="col-6 text-left">
          <div class="previous">
            <form method="POST">
              {% csrf_token %}
              <input class="btn btn-danger btn-sm btn-block" type="submit" name="submit" value="Yes">
            </form>
        </div>
        <div class="col-6 text-left">
          <div class="next">
            <a class="btn btn-info btn-sm btn-block" href="{% url 'accounts' %}">No</a>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<!-- ADD BELOW CODE TO THE BOTTOM OF BODY -->
<script>
$(document).ready(function() {
    $('a.deleteaccount').on( "click", function() {
       event.preventDefault();
       $('#deleteaccount form').attr('action', $(this).data("url"));
       $('#deleteaccount #current_username').text($(this).data("username"));
       $('#deleteaccount').modal('show');
    });
});
</script>

【讨论】:

  • 好的,但是这样用户不会被删除。我的模态没有查看 admin_profiles_deletion 函数。
  • @M.J,好的,现在我明白你的问题了)))我已经更新了我的答案。您可以使用jQuery 打开modal 并动态更改action 属性。
  • 太好了,我添加了属性action ,但是每当我想删除一个用户时,它都会删除最新的一个。没有提到一个:)
  • 我的意思是Do you want to delete {{account.username}}? 总是指最新的用户。在模态标签中,但在 &lt;!-- Modal --&gt; 之前打印真实的 username
  • @M.J,参见工作示例http://jsfiddle.net/cbzmewhq/1/。将 jQuery 脚本添加到 body html 标记的底部,在 jquery.jsbootstrap.js 之后。那一定行得通。
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 2020-01-19
  • 1970-01-01
  • 2018-11-20
  • 2012-09-10
  • 1970-01-01
  • 2015-05-14
  • 2014-11-19
相关资源
最近更新 更多