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()
函数中是否可能发生了某些事情,从而删除了消息的标签?文本仍然显示,但格式不显示。
答案 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-
的类。