在我的模板中,我有javascript向Django方法发送GET调用。在这个方法中,我想将一个空白表单返回给模板。这是我的javascript:
require(["dojo/request/xhr", "dojo/domReady!"],
function(xhr, ready){
var url = window.location.pathname + "dev/" + report_id + "/" + report_url + "/";
xhr(url, {
method: "get"
}).then(
function(response){
var json_response = JSON.parse(response);
//do stuff
}
);
});
以下是我的Django视图中发生的事情:
def my_view(request):
if request.method == "GET":
form = MyForm()
data = json.dumps({
'form': form,
})
return HttpResponse(data, mimetype="application/json")
else:
#do other stuff
这是我现在得到的错误:
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <development.dev_forms.MyForm object at 0x7f3a8dd07e50> is not JSON serializable
所以我似乎无法序列化Django表单。所以,我想以某种方式将此表单的字段返回给模板。我还有什么方法可以做到这一点?有没有办法获得所有字段的HTML?然后我可以自己建一本字典。还有其他建议吗?谢谢!
答案 0 :(得分:1)
我认为你需要的是返回一个html表单。如果要显示带有ajax的表单,则应该这样做。例如,您可以将render_to_response
与模板一起使用,以呈现所需的表单,并在模板的上下文中传递表单.....
我不知道您想对表单做什么,但我认为这样的事情可以帮助您:
查看文件
from django.shortcuts import render_to_response
def my_view(request):
if request.method == "GET":
form = MyForm()
return render_to_response('app/template.html', {"form": form})
else:
#do other stuff
应用/ template.html 强>
<form action='some_url' method='get'>
{{form}}
<input type='submit' value'Save' />
</form>
答案 1 :(得分:1)
首先需要渲染表单,然后将其传递回ajax调用:
ctx = {'form': MyForm()}
data = {
"form": render_to_string("app/form_template.html", ctx, context_instance=RequestContext(request))
}
return HttpResponse(json.dumps(data), mimetype="application/json")
然后在您的ajax调用的json_response.form
函数中使用success
获取表单。