messages.error()格式不正确,但是.success()确实

时间:2018-09-29 05:21:54

标签: django django-forms django-views

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'))

'accounts:dashboard'模板所扩展的base.html相关部分

<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 :(得分:0)

您正在使用引导程序,该引导程序具有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-的类。