Всплывающее окно в HTM/Django

День добрый, я новичок в django

Как создать всплывающее окно с информацией, при этом редиректиться на эту же страницу вщ views.py?

Знаю, можно через форму в html закинуть: return return render(request, 'html/.html',{form:'form'})

@login_required
def basket_add(request, concert_id):
    concert = Concert.objects.get(id=concert_id)
    baskets = Basket.objects.filter(user=request.user, concert=concert)
    current_page = request.META.get('HTTP_REFERER')
    if not baskets.exists():
        # basket = Basket(user=request.user, concert=concert, quantity_items_on_basket=1)
        # basket.save()
        Basket.objects.create(user=request.user, concert=concert, quantity_items_on_basket=1)
        return HttpResponseRedirect(current_page)
    else:
        if concert.quantity_tickets > 0:
            basket = baskets.first()
            basket.quantity_items_on_basket += 1
            basket.save()
            return HttpResponseRedirect(current_page)
        else:
            ***print('не хватает билетов')***
            return HttpResponseRedirect(current_page)

Я думаю вам поможет это: (пример из моего проекта)

from django.views.generic import FormView
from .forms import ContactForm
from django.urls import reverse_lazy
from django.contrib import messages
from django.http import HttpResponseRedirect


class ContactUs(FormView):
    form_class = ContactForm
    template_name = 'feedback/contact_us.html'
    #редирект на ту же страницу
    success_url = reverse_lazy('contact_us')

    def form_valid(self, form):
        try:
            form.save()
            #успешное сообщение
            messages.success(self.request, 'Сообщение отправлено')
        except Exception:
            #ошибка
            messages.error(self.request, 'Сообщение не отправлено')
        return HttpResponseRedirect(self.get_success_url())

потом в темплейте выводите следующим образом:

{% if messages %}
        {% for message in messages %}
            <div class="alert {{message.tags}} alert-dismissible fade show" role="alert">
            {{ message }}
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
            </div>
        {% endfor %}
    {% endif %}

В настройках еще надо прописать классы css для разного уровня сообщений:

from django.contrib.messages import constants as messages

MESSAGE_TAGS = {
    messages.DEBUG: 'alert-info',
    messages.INFO: 'alert-info',
    messages.SUCCESS: 'alert-success',
    messages.WARNING: 'alert-warning',
    messages.ERROR: 'alert-danger',
}

Но в принципе можете обойтись без классов, если вам это не нужно

Вернуться на верх