messages.error () неправильно форматирует, но .success () - PullRequest
0 голосов
/ 29 сентября 2018

Возникла проблема с 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(), которая удаляет тег для сообщения?Текст по-прежнему отображается, но не форматируется.

1 Ответ

0 голосов
/ 29 сентября 2018

Вы используете bootstrap, который имеет стили для alert-success, но не для alert-error, который генерирует ваш HTML для сообщения об ошибке (обратите внимание, что Django не делает для вас никакого стиля).

Если вы хотите стилизовать alert-error, то вам нужно сделать это самостоятельно.Bootstrap имеет класс alert-danger, который, вероятно, аналогичен тому, что вы хотите, и в этом случае вам нужно добавить CSS в стиль alert-error аналогично alert-danger, например:

.alert-error {
    color: #721c24;
    background-color: #f8d7da;
    border-color: #f5c6cb;
}

Также обратите вниманиечто messages.tags на самом деле представляет собой список тегов, разделенных пробелами, так что вы можете получить классы, для которых нет префикса alert-.

...