如何在Django中显示警报错误

如何在Django中显示警报错误,django,forms,validationerror,Django,Forms,Validationerror,我在forms.py中创建了一个clean_message方法,该方法检查self.message是否有内容,如果没有,则引发一个ValidationError """ Comment """ class CommentForm(forms.Form): """ Comment field """ comment = forms.CharField( widget = forms.Textarea( attrs = {

我在
forms.py
中创建了一个
clean_message
方法,该方法检查
self.message
是否有内容,如果没有,则引发一个
ValidationError

"""
Comment
"""
class CommentForm(forms.Form):
    """
    Comment field
    """
    comment = forms.CharField(
        widget = forms.Textarea(
            attrs = {
                'class': 'form-control',
                'rows': 2 
            }
        )
    )

    def clean_comment(self):
        if self.cleaned_data['comment'] is None:
            raise form.ValidationError({'comment': ['You must enter your comment'])
这是视图文件。我需要什么来显示错误,如上图所示

<form action="comment" method="POST">
    {% csrf_token %}
    <div class="form-group">
        {{ form.comment.errors }}
        {{ form.comment }}
    </div>
    <div class="form-group">
        <input type="submit" value="Say it" class="btn btn-success"> 
    </div>
</form>

如果希望字段为必填字段,只需使用
required=True

comment = CharField(
    required=True,
    widget = forms.Textarea(
        attrs = {
            'class': 'form-control',
            'rows': 2 
        }
    )
)
这样,就不需要编写
clean\u comment
方法。您当前的方法失败,因为
self.cleaned_data['comment']
是空字符串
'
,但只有在
None
时才显示错误


在模板中,
{{form.comment.errors}
应该可以正常工作。

当验证失败时,我认为我做错了什么。页面似乎正在刷新并隐藏任何错误消息。“它仍然不起作用,@Alasdair。我不确定“刷新和隐藏错误消息”意味着什么。”。您的视图可能有问题,但您尚未显示,因此我们无法确定。我已更新了我的问题,添加了负责编写新注释的方法。我将再次检查您表单的
操作
。您确定要发布到正确的URL吗?另一方面,没有理由进行这种验证。将
required
属性设置为该字段将为您解决此问题。我已经将
required
放入并删除了
clean\u comment
方法。我在某个地方读到,为了显示错误,表单不能重新加载,我认为这正是正在发生的事情,但我不知道如何修复它。到目前为止,我所做的一切都没有成功。视图至少存在两个问题。首先,通过在
else
语句中设置
form=CommentForm()
,可以将无效表单(有错误)替换为空表单。其次,您应该呈现一个包含表单的模板。你改为重定向了。@Alasdair我明白了。我这样做是因为在评论之后,我想回到以前的页面,因为它有参数,我想我不能简单地重定向到特定的模板,因为参数。重定向到原始页面并仍然显示错误是很棘手的。您可以使用手动创建错误消息。另一个选项是使用来自原始页面的ajax请求,并使用JavaScript显示错误。这两种方法都比标准的Django方法复杂,Django方法返回包含无效表单的呈现模板。
comment = CharField(
    required=True,
    widget = forms.Textarea(
        attrs = {
            'class': 'form-control',
            'rows': 2 
        }
    )
)