Django - 将form.errors作为字典而不是HTML代码

时间:2013-08-07 18:06:39

标签: python django django-forms

有没有办法在字典中获取django表单验证期间生成的表单错误(键为'field_name',值为'与其相关的错误列表'),而不是它生成的默认HTML代码(ul& li组合)。我没有使用生成的HTML代码,我只是对字段名称和错误感到困扰。

4 个答案:

答案 0 :(得分:3)

不确定。我在执行Ajax的表单时经常使用这个类,而我需要返回JSON。根据需要调整/改进。在某些情况下,您可能希望返回JSON中编码的HTML,因此我将HTML标记的剥离作为选项传递。

from django import forms
from django.template.defaultfilters import striptags

class AjaxBaseForm(forms.BaseForm):
    def errors_as_json(self, strip_tags=False):
        error_summary = {}
        errors = {}
        for error in self.errors.iteritems():
            errors.update({error[0]: unicode(striptags(error[1])
                if strip_tags else error[1])})
        error_summary.update({'errors': errors})
        return error_summary

用法:

# forms.py

class MyForm(AjaxBaseForm, forms.Form): # you can also extend ModelForm
    ...

# views.py

def my_view(request):
    form = MyForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
           ...
        else:
            response = form.errors_as_json(strip_tags=True)

        return HttpResponse(json.dumps(response, ensure_ascii=False),
            content_type='application/json')

答案 1 :(得分:1)

在视图中,您可以执行此操作:

f = FooForm(data)
f.errors

答案 2 :(得分:1)

没有内置的用于返回错误的方法,例如DATA <- data.frame("Col.A" = c("Some Text", "Some other text", "Yes", "No", "no", NA, "No", "Yes", "yes", NA, NA, NA), "Col.B" = c(NA, NA, "Green", NA, NA, NA, NA, "Blue", "Blue 2", NA, NA, NA),stringsAsFactors = FALSE) DATA$newCol.B <- ifelse((DATA$Col.A == "Yes" | (DATA$Col.A == "yes") | (DATA$Col.A == "No") | (DATA$Col.A == "no")) , DATA$Col.B, DATA$Col.A) DATA #> Col.A Col.B newCol.B #> 1 Some Text <NA> Some Text #> 2 Some other text <NA> Some other text #> 3 Yes Green Green #> 4 No <NA> <NA> #> 5 no <NA> <NA> #> 6 <NA> <NA> <NA> #> 7 No <NA> <NA> #> 8 Yes Blue Blue #> 9 yes Blue 2 Blue 2 #> 10 <NA> <NA> <NA> #> 11 <NA> <NA> <NA> #> 12 <NA> <NA> <NA> ,但是您可以使用json。

dict

doc for form = MyForm(data) print(form.errors.as_json())

答案 3 :(得分:0)

致电.row { display: flex } 对我有用:

dict()

我更喜欢这种技术,因为print(dict(form.errors)) 将特殊字符转换为Unicode转义序列。