Django отправляет в ответ только оповещение, а не полный шаблон
Как отправить только сообщение об оповещении в ответ на запрос вместо того, чтобы отправлять шаблон, созданный только для оповещения?
Я использую асинхронный вызов Javascript. Мне нужно, чтобы в html-ответе оповещения отображалось только InnerHTML
.
Я также использую Bootstrap. Мне нужен тип сообщения, чтобы Bootstrap мог отобразить правильный цвет/css.
Настройки.py с типами оповещений Bootstrap.
MESSAGE_TAGS = {
messages.DEBUG: 'alert-secondary',
messages.INFO: 'alert-info',
messages.SUCCESS: 'alert-success',
messages.WARNING: 'alert-warning',
}
View
@login_required(login_url="/login/")
@csrf_protect
def usersave(request):
msg = messages.add_message(request, messages.WARNING, "This is a demo. First complete all info to save.")
return render(request, msg) # Want to send just msg instead of a template for an alert.
Шаблон
{% if messages %}
<div class="container text-center my-3">
{% for message in messages %}
<div class="alert {{ message.tags }} alert-dismissible fade show" role="alert">
<span id="alertmessage">{{ message }}</span>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
</div>
{% endif %}
Если вы используете асинхронный вызов, например fetch
, и хотите, чтобы api возвращало обычное текстовое сообщение, вы можете вернуть простое HttpResponse
или JsonResponse
вместо использования функции render
:
from django.http import HttpResponse
@login_required(login_url="/login/")
@csrf_protect
def usersave(request):
# Your logic here
alert = '''
<div class="alert alert-primary" role="alert">
This is a demo. First complete all info to save.
</div>
'''
return HttpResponse(alert)