如何将django表单呈现为html(不在模板中)

时间:2015-05-10 02:58:37

标签: django forms templates

我有一个模板,我有

<div id="form-wrapper">
    {{form}}
</div>

现在,如果用户提交(通过AJAX)并且有错误,我想做

$("#form-wrapper").html(data.form);

基本上只需替换整个表单即可显示错误。但是当我写作

return JsonResponse({'form': form})

视图中的

django告诉我,我的表单不可序列化。说得通。所以我的问题是:django如何将表单呈现为html?我应该拨打什么功能?

注意:我知道我只能返回错误而不是整个表单,但是在模板中需要更多的js代码才能将每个字段的错误放在正确的位置。我想要当我说{{form}}时django使用的一个函数。

谢谢!

2 个答案:

答案 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。