2013-08-23 3 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.form в success функции вашего 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

Извините @ Di-Zou. Я допустил ошибку и написал POST как метод формы, но должен быть GET. Посмотрите, работает ли это сейчас. Просто измените метод формы – marianobianchi

Смежные вопросы