Arrow
Arrow8. Februar 2019 06:51

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

href, modal, Js, Django

Добрый день!

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

Файл views.py:

class DeleteObject(LoginRequiredMixin, DeleteView):
    model = Object
    template_name = 'todoList/home.html'

    def get(self, request, *args, **kwargs):
        obj = get_object_or_404(Object, id=self.kwargs.get('id'))
        # Check for uncompleted tasks
        uncompleted = Data.objects.filter(objects=obj).filter(state=False).count()

        if uncompleted == 0:
            obj.delete()
        return redirect('home')

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

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

<div class="dropdown">
    <div class="circle dropdown-toggle ml-2" data-toggle="dropdown"></div>
    <div class="dropdown-menu">
        <a class="dropdown-item" href="{% url 'obj_update' object.id %}">Edit</a>
        <a class="dropdown-item" data-toggle="modal" data-target="#taskModal" OnClick="getId('{{ object.id }}')">Delete</a>

        <script language="javascript">
            function getId(objID) {
                link = "{% url 'del_obj' " + objID + " %}"; // Error
                objdel.setAttribute('href', link);
            };
        </script>
    </div>   
</div>

<div id="taskModal" class="modal fade">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title">Confirm deletion</h4>
            </div>
            <div class="modal-body">Are your sure you want to delete?</div>
            <div class="modal-footer">
                <a id="objdel" class="btn btn-danger" type="button" data-dismiss="modal" href="">Delete</a>
                <a class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</a>
            </div>
        </div>
    </div>
</div>

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

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

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

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

4
Arrow
  • 8. Februar 2019 07:05

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

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

Ошибка:

TemplateSyntaxError at /
Could not parse the remainder: '{id}' from '{id}'

На строку:

var link = "{% url 'del_obj' {id} %}".replace('{id}', objectID);
    Evgenii Legotckoi
    • 8. Februar 2019 08:45
    • Die Antwort wurde als Lösung markiert.

    Добрый день.

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

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

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

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

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

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

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

    {% url 'del_obj' object.id %}

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

    <div class="dropdown">
        <div class="circle dropdown-toggle ml-2" data-toggle="dropdown"></div>
        <div class="dropdown-menu">
            <a class="dropdown-item" href="{% url 'obj_update' object.id %}">Edit</a>
            <a class="dropdown-item" data-toggle="modal" data-target="#taskModal" OnClick="getId('{% url 'del_obj' object.id %}')">Delete</a>
    
            <script language="javascript">
                function getId(url) {
                    link = url; 
                    objdel.setAttribute('href', link);
                };
            </script>
        </div>   
    </div>
    
      Arrow
      • 8. Februar 2019 09:09

      Спасибо!

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

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

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

        Arrow
        • 8. Februar 2019 09:16

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

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

        <a class="dropdown-item" data-toggle="modal" data-target="#taskModal" onclick="getUrl('{% url 'del_obj' object.id %}')">Delete</a>
        
        <script language="javascript">
            function getUrl(url) {
                del_obj.setAttribute('href', url);
            }
            function goto() {
                var url = del_obj.getAttribute('href');
                return location.href = url;
            }
        </script>
        
        <div id="taskModal" class="modal fade">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <h4 class="modal-title">Confirm deletion</h4>
                    </div>
                    <div class="modal-body">Are your sure you want to delete?</div>
                    <div class="modal-footer">
                        <a id="del_obj" class="btn btn-danger" type="button" data-dismiss="modal" href="" onclick="goto()">Delete</a>
                        <a class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</a>
                    </div>
                </div>
            </div>
        </div>
        
        

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

          Kommentare

          Nur autorisierte Benutzer können Kommentare posten.
          Bitte Anmelden oder Registrieren
          Letzte Kommentare
          A
          ALO1ZE19. Oktober 2024 08:19
          Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
          ИМ
          Игорь Максимов5. Oktober 2024 07:51
          Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
          d
          dblas55. Juli 2024 11:02
          QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
          k
          kmssr8. Februar 2024 18:43
          Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
          Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
          Jetzt im Forum diskutieren
          J
          JacobFib17. Oktober 2024 03:27
          добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
          JW
          Jhon Wick1. Oktober 2024 15:52
          Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
          КГ
          Кирилл Гусарев27. September 2024 09:09
          Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
          F
          Fynjy22. Juli 2024 04:15
          при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

          Folgen Sie uns in sozialen Netzwerken