我有一个模板,我有
<div id="form-wrapper">
{{form}}
</div>
现在,如果用户提交(通过AJAX
)并且有错误,我想做
$("#form-wrapper").html(data.form);
基本上只需替换整个表单即可显示错误。但是当我写作
return JsonResponse({'form': form})
django告诉我,我的表单不可序列化。说得通。所以我的问题是:django如何将表单呈现为html?我应该拨打什么功能?
注意:我知道我只能返回错误而不是整个表单,但是在模板中需要更多的js代码才能将每个字段的错误放在正确的位置。我想要当我说{{form}}
时django使用的一个函数。
谢谢!
答案 0 :(得分:1)
所有模板在显示任何对象时都会在其上调用str()
(或unicode()
)。在内部,在表单类上实现这些的方法只是委托给as_table()
method。所以你可以直接调用它:
return JsonResponse({'form': form.as_table()})
但是请注意,您可能希望添加其他HTML,在这种情况下,更好的方法可能是使用render_to_string
简单地将包含表单的短模板片段呈现为字符串 - 然后发送在Json的回应中。
答案 1 :(得分:0)
你必须卸载表单,因为它是一个对象
if not form.is_valid():
errors = form.errors # You'll get a dict of errors
return JsonResponse(data=errors)
从这里使用javascript创建新的HTML。