2013-08-23 70 views
0

在我的模板中,我有JavaScript發送GET調用Django方法。在這種方法中,我想返回一個空白表單回到模板。下面是我的javascript:在Django中,如何將表單返回給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?然後,我可以自己創建一本字典。還有其他建議嗎?謝謝!

回答

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") 

然後在獲得使用json_response.formsuccess你的Ajax調用函數的形式。

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> 
+0

這不會返回任何東西給我的Javascript。我擁有的是一個鏈接的頁面。根據我點擊的鏈接,需要呈現不同的表單。我正在嘗試使用JS來檢索該窗體。 –

+0

我不知道使用ajax的方式,但它可能需要修改一下才能使用。我知道我的方法適用於此:http://api.jquery.com/load/ – marianobianchi

+0

對不起@迪Z。我犯了一個錯誤,並寫入POST作爲表單方法,但它應該是GET。看看它現在是否有效。只需更改表單的方法 – marianobianchi

相關問題