Django的表单框架是否使用Django消息框架?
我正在使用django-registration,并开始了解Django的表单框架。我一直在用.to_p()
这个方法来显示表单,但我想要更好的方式来展示表单数据,所以我在研究这个表单框架。
表单框架传递的错误信息会传递到Django的消息框架吗?
3 个回答
0
不,不会自动处理。你需要自己来处理这个问题。
if not form.is_valid():
# loop through form.errors and
# convert that in messages.error
# where appropriate
2
每个表单的字段都有自己的错误信息,这些信息保存在一个字典里……所以
class MyForm(Form):
myfield = CharField()
nullfield = CharField(blank=True)
在你进行验证的步骤之后,如果发现了一些表单错误,它们都会被存储在错误字典里,因此,
form = MyForm(request.GET)
if form.is_valid():
...
else:
# assert form errors
assert 0, form.errors
错误字典的样子会是这样的
{'myfield': [u'This field is required.']}
所以,每个错误都会被添加到错误字典中。你可以查看这个字典,并创建一个统一的错误信息,或者在你的视图中做其他任何你想做的事情。或者在模板中,你可以用
{%for err in form.errors%}
........
{%endfor %}
正如你所看到的,这里没有提到django消息应用……如果你真的想把这些错误信息传递给django消息应用,你可以尝试
for error in form.errors:
request.user.message_set.create(message=form.errors['error'])
4
不,它们是完全独立的——这也是应该的,因为消息功能在 django.contrib
里,所以不能保证它一定会被启用。
显示错误的最佳方式是在表单内部,就像 as_p
方法那样。我使用一个模板标签来一次性显示每个字段及其相关的错误——这是对彼得·鲍姆加特纳的 display_field 标签 的修改版本。