Возникла проблема с messages.error()
, которая не отображается должным образом в HTML-шаблоне.
У меня есть Participant
модели, в которых пользователи регистрируют своих участников в исследовательском проекте.Когда они заполняют регистрационную форму, пользовательский метод form_valid()
в CreateView
отправляется в другую функцию, которая оценивает соответствие нового пациента - если это возможно, форма сохраняется в модели и отображается messages.success()
.Если они не соответствуют критериям, форма не сохраняется, и должно отображаться messages.error()
.
В настоящее время все функции проверки приемлемости работают отлично, и, если они соответствуют критериям, отображается сообщение об успехе.Тем не менее, когда не подходит, сообщение об ошибке не отображается должным образом.Текст отображается на странице перенаправления, однако он не отформатирован, поскольку сообщение об ошибке должно быть в красном поле.
views.py
class ParticipantRegisterView(LoginRequiredMixin, CreateView):
model = Participant
form_class = ParticipantRegisterForm
template_name = 'participants/register.html'
success_url = reverse_lazy('accounts:dashboard')
def participant_eligible(self, temp):
if not temp.is_eligible:
return False
else:
return True
def form_valid(self, form):
form.instance.provider = self.request.user
temp = form.save(commit=False)
if self.participant_eligible(temp):
messages.success(self.request, 'Participant registered')
return super().form_valid(form)
else:
messages.error(self.request, 'Participant ineligible')
return redirect(reverse_lazy('accounts:dashboard'))
соответствующая часть файла base.html, которыйшаблон для "account: dashboard" расширяется
<html lang="en" dir="ltr">
...
<main role="main" class="container">
<div class="row">
<div class="col-md-8">
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
</div>
</div>
</main>
</html>
Возможно, что-то происходит в функции redirect()
, которая удаляет тег для сообщения?Текст по-прежнему отображается, но не форматируется.