Всплывающее окно в 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',
}
Но в принципе можете обойтись без классов, если вам это не нужно