首页 > 解决方案 > Django使用模态删除用户

问题描述

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

视图.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然后删除特定帐户。但是我在使用模态时不知道该怎么做。

标签: djangotwitter-bootstrapdjango-templatesbootstrap-modal

解决方案


试试这个。

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/

添加<span id="current_username"></span>?到您的模态主体。

然后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>

推荐阅读