отобразить новый объект Django с помощью jQuery - PullRequest
1 голос
/ 12 апреля 2011

Я изучал Django + jQuery и до сих пор был в состоянии AJAX-ify функциональность New Post.Мой вопрос теперь заключается в том, как мне легко и просто отобразить новое сообщение в списке сообщений AJAX-ly?

views.py:

def add_post(request):
error_msg = u"No POST data sent."
post = Post()
if request.method == "POST":
    #do stuff

return HttpResponse("success")

Пока я могу вернуться "успешно"и сохранить новую запись просто отлично.

jQuery:

       $("form#add_post").submit(function() {
       //do stuff
       var args = {type:"POST", url:"add_post/", data:data, complete:function(res, status) {
            if (status == "success") {
                alert("success");
            } else {

            }
        }};

       $.ajax(args);

       return false;

   })

Просто предупреждаю об "успехе" здесь, и это прекрасно работает.Я могу увидеть новое сообщение в списке сообщений, если обновлю страницу.Теперь, как мне загрузить новый пост AJAX-ly?Нужно ли мне брать атрибуты Post и добавлять их в мой DIV вручную?Есть ли простой способ перезагрузить мой список сообщений?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 12 апреля 2011

Почему бы вам просто не вернуть HTML для сообщения, возвращаемого в случае успеха, и использовать jQuery, чтобы добавить его туда, где он должен находиться на вашей странице. Это то, что я обычно делаю в своем коде, это быстро и легко. Для более сложных решений вы, возможно, захотите вернуть список объектов JSON и использовать инфраструктуру javascript, такую ​​как backbone.js

1 голос
/ 13 апреля 2011

Вот глупый путь;

views.py:

def add_post(request):
    error_msg = u"No POST data sent."
    post_instance = Post()
    if request.method == "POST":
        # I love Rock'nRoll
        return post_instance

 return HttpResponse(json.dumps({'status': 'success', 'object': post_instance}))

В части шаблона используйте $.getJSON или $.ajax, чтобы поймать json объект из вашего views.py и, если это success, .append() возвращенный объект post_instance в список.

0 голосов
/ 12 апреля 2011

В бэкэнд-сервисе Django вам необходимо вернуть некоторую информацию, связанную с логикой вашего приложения. В основном люди используют для этого JSON.

def add_post(request):
   error_msg = u"No POST data sent."
   post = Post()
   if request.method == "POST":
      #do stuff
      response = HttpResponse(content_type = 'application/javascript')
      data = dict()
      #here it comes your logic
      #that fills 'data' with whichever 
      #information you need.
      data['message']='post added !!'
      response.write(json.dumps(data))
      return response
   else:
      return HttpResponse("NO POST REQUEST HANDLE")

Ваша клиентская сторона будет обрабатывать этот ответ в соответствии с данными, записанными в объекте HttpResponse.

   complete: function(res, status) {
            //In here you can do whatever you want to modify your
            //HTML dynamically
            // the variable res contains the JSON object dumped in the
            // django HTTPResponse object.
            $("#message").text = res['message'];
    }

   error: function(res, status) {
            $("#message").text = "error handling ajax request";
    }

Убедитесь, что вы обрабатываете и обратные вызовы error и complete.

В приведенном мною примере вам потребуется элемент HTML с message в качестве идентификатора, т. Е.:

<div id="message"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...