0

在我的模板中,我有向 Django 方法发送 GET 调用的 javascript。在这种方法中,我想将一个空白表单返回给模板。这是我的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?然后我可以自己制作一本字典。还有其他建议吗?谢谢!

4

2 回答 2

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

应用程序/模板.html

<form action='some_url' method='get'>
    {{form}}
    <input type='submit' value'Save' />
</form>
于 2013-08-23T16:55:53.007 回答
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

于 2013-08-23T18:09:10.230 回答