Arrow
Feb. 8, 2019, 5:51 p.m.

Запрос подтверждения удаления записи

href, modal, Js, Django

Добрый день!

Пытаюсь на django реализовать удаление записи, а диалог подтверждение удаления хочу вынести в модальное окно.

Файл views.py:

  1. class DeleteObject(LoginRequiredMixin, DeleteView):
  2. model = Object
  3. template_name = 'todoList/home.html'
  4.  
  5. def get(self, request, *args, **kwargs):
  6. obj = get_object_or_404(Object, id=self.kwargs.get('id'))
  7. # Check for uncompleted tasks
  8. uncompleted = Data.objects.filter(objects=obj).filter(state=False).count()
  9.  
  10. if uncompleted == 0:
  11. obj.delete()
  12. return redirect('home')

То есть реализовал удаление сразу при клике на ссылку удаления записи.

Пытаюсь в шаблоне (*.html) сделать так:

  1. <div class="dropdown">
  2. <div class="circle dropdown-toggle ml-2" data-toggle="dropdown"></div>
  3. <div class="dropdown-menu">
  4. <a class="dropdown-item" href="{% url 'obj_update' object.id %}">Edit</a>
  5. <a class="dropdown-item" data-toggle="modal" data-target="#taskModal" OnClick="getId('{{ object.id }}')">Delete</a>
  6.  
  7. <script language="javascript">
  8. function getId(objID) {
  9. link = "{% url 'del_obj' " + objID + " %}"; // Error
  10. objdel.setAttribute('href', link);
  11. };
  12. </script>
  13. </div>
  14. </div>
  15.  
  16. <div id="taskModal" class="modal fade">
  17. <div class="modal-dialog">
  18. <div class="modal-content">
  19. <div class="modal-header">
  20. <h4 class="modal-title">Confirm deletion</h4>
  21. </div>
  22. <div class="modal-body">Are your sure you want to delete?</div>
  23. <div class="modal-footer">
  24. <a id="objdel" class="btn btn-danger" type="button" data-dismiss="modal" href="">Delete</a>
  25. <a class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</a>
  26. </div>
  27. </div>
  28. </div>
  29. </div>

Пытаюсь в атрибут href="" объекта id="objdel" впихнуть "{% url 'del_obj' " + objID + " %}", чтобы при клике в диалоге на "Delete" удалялась запись.

В строке "link = "{% url 'del_obj' " + objID + " %}";" ругается на то что objID не подходит в качестве параметра для "del_obj".

Возможно есть способ реализовать это по другому или я не правильно передаю ссылку?

2

Do you like it? Share on social networks!

4
Arrow
  • Feb. 8, 2019, 6:05 p.m.

Пробовал так:

  1. var link = "{% url 'del_obj' {id} %}".replace('{id}', objectID);

Ошибка:

  1. TemplateSyntaxError at /
  2. Could not parse the remainder: '{id}' from '{id}'
  3.  
  4. На строку:
  5.  
  6. var link = "{% url 'del_obj' {id} %}".replace('{id}', objectID);
    Evgenii Legotckoi
    • Feb. 8, 2019, 7:45 p.m.
    • The answer was marked as a solution.

    Добрый день.

    Вот это работать и не будет

    1. link = "{% url 'del_obj' " + objID + " %}"; // Error

    Давайте разберёмся, ка работает {% url 'del_obj' %}

    Начнём с того, что это шаблонный тег, а значит он должен быть обработан на сервере прежде, чем будет отослан клиенту в веб-браузер.

    А JavaScript в данном случае может выполниться только на стороне клиента в данном случае.

    Значит, чтобы тег отработал, ему нужна адекватная информация, без конкатенаций со стороны JavaScript, посольку это будет совсем другой шаг, когда уже всё отрендерено.

    В сухом остатке это может выглядеть только так

    1. {% url 'del_obj' object.id %}

    то есть, я бы написал так

    1. <div class="dropdown">
    2. <div class="circle dropdown-toggle ml-2" data-toggle="dropdown"></div>
    3. <div class="dropdown-menu">
    4. <a class="dropdown-item" href="{% url 'obj_update' object.id %}">Edit</a>
    5. <a class="dropdown-item" data-toggle="modal" data-target="#taskModal" OnClick="getId('{% url 'del_obj' object.id %}')">Delete</a>
    6.  
    7. <script language="javascript">
    8. function getId(url) {
    9. link = url;
    10. objdel.setAttribute('href', link);
    11. };
    12. </script>
    13. </div>
    14. </div>
      Arrow
      • Feb. 8, 2019, 8:09 p.m.

      Спасибо!

      Я по началу так и хотел сделать но в строке:

      1. <a class="dropdown-item" data-toggle="modal" data-target="#taskModal" OnClick="getId('{% url 'del_obj' object.id %}')">Delete</a>

      Сбила подсветка синтаксиса и кавычки, выглядит как буд-то del_obj стоит вне кавычек. Засомневался, что не будет работать.

        Arrow
        • Feb. 8, 2019, 8:16 p.m.

        Странно, но поссылке переходить отказывается, хотя и показывает, что она там есть.

        Для работы пришлось немного поменять:

        1. <a class="dropdown-item" data-toggle="modal" data-target="#taskModal" onclick="getUrl('{% url 'del_obj' object.id %}')">Delete</a>
        2.  
        3. <script language="javascript">
        4. function getUrl(url) {
        5. del_obj.setAttribute('href', url);
        6. }
        7. function goto() {
        8. var url = del_obj.getAttribute('href');
        9. return location.href = url;
        10. }
        11. </script>
        12.  
        13. <div id="taskModal" class="modal fade">
        14. <div class="modal-dialog">
        15. <div class="modal-content">
        16. <div class="modal-header">
        17. <h4 class="modal-title">Confirm deletion</h4>
        18. </div>
        19. <div class="modal-body">Are your sure you want to delete?</div>
        20. <div class="modal-footer">
        21. <a id="del_obj" class="btn btn-danger" type="button" data-dismiss="modal" href="" onclick="goto()">Delete</a>
        22. <a class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</a>
        23. </div>
        24. </div>
        25. </div>
        26. </div>
        27.  

        Без пинка со стороны JavaScript по ссылке переходить отказывается.

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          • Last comments
          • AK
            April 1, 2025, 11:41 a.m.
            Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
          • Evgenii Legotckoi
            March 9, 2025, 9:02 p.m.
            К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
          • VP
            March 9, 2025, 4:14 p.m.
            Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
          • ИМ
            Nov. 22, 2024, 9:51 p.m.
            Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
          • Evgenii Legotckoi
            Oct. 31, 2024, 11:37 p.m.
            Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup