Как удалить пользователя с подтверждением, передав URL и имя пользователя var в django - PullRequest
1 голос
/ 07 января 2020

У меня есть html, которые показывают список пользователей, созданных в этом приложении, в таблице вот html

<div class="row mt">
          <div class="col-md-12">
            <div class="content-panel align-content-center">
              <table class="table table-striped table-advance table-hover">
                <thead>
                  <tr>
                    <th><i class="fa fa-bullhorn"></i> User</th>
                    <th><i class="fa fa-bookmark"></i> Email</th>
                    <th><i class="fa fa-bookmark"></i> Division</th>
                    <th><i class="fa fa-bookmark"></i> Role</th>
                    <!-- <th><i class=" fa fa-edit"></i> Status</th> -->
                    <th></th>
                  </tr>
                </thead>
                <tbody>  
                  {% for user in users %}
                    <tr>
                      <td class="user_name">

                        {{user.name}}

                      </td>
                      <td>
                        {{user.email}}
                      </td>
                      <td>
                        {{user.division}}
                      </td>
                      <td>
                      <select id="userroles" class="roleselect" data-username="{{ user.name }}">                        
                        <option selected="selected">
                          {{user.role}}
                        </option>
                        {% if user.role == "Business Analyst" %}
                           <option>Admin</option>
                           <option>Manager</option>
                           <option>Segment Manager</option>
                        {% elif user.role == "Admin" %}
                           <option>Business Analyst</option>
                           <option>Manager</option>
                           <option>Segment Manager</option>
                        {% elif user.role == "Manager" %}
                           <option>Admin</option>
                           <option>Business Analyst</option>
                           <option>Segment Manager</option>
                        {% else %}
                           <option>Admin</option>
                           <option>Manager</option>
                           <option>Business Analyst</option>                       
                        {% endif %}
                      </select>
                      </div>
                      </td>                    
                    <td>                  
                       <button  class="btn btn-danger btn-xs" onclick="myFunction()"><i class="fa fa-trash-o "></i></button>
                    </td>
                  </tr>
                  {% endfor %}   

                </tbody>
              </table>
            </div>
            <!-- /content-panel -->
          </div>
          <!-- /col-md-12 -->
        </div>
        <!-- /row -->
      </section>
    </section>

Я хочу сделать функцию удаления, которая требует подтверждения, прежде чем я использую onlick = "window.location.href = '{% url' polls: deleteuser 'user_name = user.name%}';", и это работает, но теперь я хочу сделать подтверждение, поэтому я пишу такой скрипт

 <script>

function myFunction() {
  var txt;
  if (confirm("Do you want to delete!")) {
   window.location.href ='{% url 'polls:deleteuser' user_name=user.name %}';
  } else {
  //don't do anything
  }

}
  </script>

каждый раз, когда я нажимаю ок, будет ошибка Reverse for 'deleteuser' with keyword arguments '{'user_name': ''}' not found. 1 pattern(s) tried: ['deleteuseradmin/(?P<user_name>[^/]+)$']

window.location.href не работает, может быть, он не может перейти от значения класса? Мне нужна помощь, чтобы исправить это

вот URL

path('deleteuseradmin/<str:user_name>',views.del_user,name='deleteuser'),

спасибо

РЕДАКТИРОВАТЬ: VIEWS.PY

def del_user(request, user_name): 
    u = User.objects.get(username = user_name)      
    identity = u.id
    import cx_Oracle
    dsn_tns = cx_Oracle.makedsn('', '', sid='') 
    conn = cx_Oracle.connect(user=r'', password='', dsn=dsn_tns) 
    c = conn.cursor() 
    c.execute("delete from polls_userprofileinfo where user_id = '"+str(identity)+"'")
    conn.commit()
    c.execute("delete from auth_user where  id = '"+str(identity)+"'")
    conn.commit()
    messages.success(request, "The user is deleted")     
    print("sukses");
    return redirect('/manageuser/')

трассировка ошибок

NoReverseMatch at /manageuser/
Reverse for 'deleteuser' with arguments '('',)' not found. 1 pattern(s) tried: ['deleteuseradmin/(?P<user_name>[^/]+)$']
Request Method: GET
Request URL:    http://127.0.0.1:8000/manageuser/
Django Version: 2.2.6
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'deleteuser' with arguments '('',)' not found. 1 pattern(s) tried: ['deleteuseradmin/(?P<user_name>[^/]+)$']
Exception Location: C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\urls\resolvers.py in _reverse_with_prefix, line 673
Python Executable:  C:\Users\u532246\AppData\Local\Programs\Python\Python38\python.exe
Python Version: 3.8.0
Python Path:    
['C:\\Users\\u532246\\Desktop\\django-master-terbaru-4\\django-master-terbaru3\\django-master-terbaru3\\Django-master',
 'C:\\Users\\u532246\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip',
 'C:\\Users\\u532246\\AppData\\Local\\Programs\\Python\\Python38\\DLLs',
 'C:\\Users\\u532246\\AppData\\Local\\Programs\\Python\\Python38\\lib',
 'C:\\Users\\u532246\\AppData\\Local\\Programs\\Python\\Python38',
 'C:\\Users\\u532246\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages']
Server time:    Tue, 7 Jan 2020 09:38:09 +0000
Error during template rendering
In template C:\Users\u532246\Desktop\django-master-terbaru-4\django-master-terbaru3\django-master-terbaru3\Django-master\polls\templates\manage_user.html, error at line 342

Reverse for 'deleteuser' with arguments '('',)' not found. 1 pattern(s) tried: ['deleteuseradmin/(?P<user_name>[^/]+)$']
332           }
333         });
334       });
335       });
336   </script>
337   <script>
338 
339 function myFunction() {
340   var txt;
341   if (confirm("Do you want to delete!")) {
342    window.location.href ='{% url 'polls:deleteuser' user.name %}';
343   } else {
344   //don't do anything
345   }
346 
347 }
348   </script>
349 
350 </body>
351 
352 </html>
Traceback Switch to copy-and-paste view
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\exception.py in inner
            response = get_response(request) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\base.py in _get_response
                response = self.process_exception_by_middleware(e, request) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\base.py in _get_response
                response = wrapped_callback(request, *callback_args, **callback_kwargs) …
▶ Local vars
C:\Users\u532246\Desktop\django-master-terbaru-4\django-master-terbaru3\django-master-terbaru3\Django-master\polls\views.py in manageuser
            return render(request, 'manage_user.html',context) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\shortcuts.py in render
    content = loader.render_to_string(template_name, context, request, using=using) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\loader.py in render_to_string
    return template.render(context, request) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\backends\django.py in render
            return self.template.render(context) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py in render
                    return self._render(context) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py in _render
        return self.nodelist.render(context) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py in render
                bit = node.render_annotated(context) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\base.py in render_annotated
            return self.render(context) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\template\defaulttags.py in render
            url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\urls\base.py in reverse
    return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) …
▶ Local vars
C:\Users\u532246\AppData\Local\Programs\Python\Python38\lib\site-packages\django\urls\resolvers.py in _reverse_with_prefix
        raise NoReverseMatch(msg) …
▶ Local vars

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Это не решение, но шаги для устранения этой проблемы:

  1. Посмотрите на HTML исходный код в вашем браузере (не в редакторе исходного кода) , так что вы можете увидеть, что в действительности выполняется javascript после того, как Django отобразит шаблоны. Таким образом, вы можете проверить правильность URL-адреса внутри вашего javascript.
  2. В инструментах отладки вашего браузера go перейдите на вкладку Сеть и посмотрите на сделанные запросы / ответы. Вы могли бы видеть, что:

    • Когда вы нажимаете "ok", запрос на / deleteuseradmin / выполняется правильно (запрос HTTP GET)
    • Существует ответ на перенаправление (HTTP 302) с заголовком Location, установленным в "/ manageuser"
    • . Это происходит при возникновении ошибки, возвращающей HTTP 404.
  3. В редакторе исходного кода (IDE) установите точку останова. в вашем del_user виде. Вы увидите, что достигли этой точки останова и можете пройти по своему коду до вызова `redirect ('/ manageuser'), так что все работает, как и ожидалось.

Ошибка говорит" NoReverseMatch в / manageuser / "так что проблема при получении" /manageuser/".

Теперь вам нужно взглянуть на шаблон, представленный соответствующим представлением "/ manageuser". Содержит ли этот шаблон {% url 'polls:deleteuser' user_name=user.name %}'? Is user`, определенный правильно?

0 голосов
/ 07 января 2020

попробуйте

<button  class="btn btn-danger btn-xs" onclick="myFunction({{user.name}})"><i class="fa fa-trash-o "></i></button>

function myFunction(user_name) {
  var txt;
  if (confirm("Do you want to delete!")) {
   window.location.href ='{% url 'polls:deleteuser' user_name='+user_name+' %}';
  } else {
  //don't do anything
  }

}

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...