如何在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
}
)
)