Django模板 - ajax响应 - 如何?

时间:2015-09-25 20:56:37

标签: javascript jquery python ajax django

在阅读了一些关于此的博客后,我找不到答案,也在SO中搜索过。

我有一个使用django模板标签的模板:

<div class="box" id="dates">
     <h2 class="h2">Dates</h2>
          <ul class="list-group">
                {% for days in dates %}
                <li class="list-group-item list-group-item-success">{{ days }}</li>
                {% endfor %}
          </ul>
</div>

这个div等待来自ajax响应的答案。这是ajax代码:

$("#formi").submit(function(event){
   event.preventDefault();
    var data = new FormData($('form').get(0));

        $.ajax({
             type:"POST",
             url:"{% url 'dates' %}",
             data: data,
             processData: false,
             contentType: false,
             csrfmiddlewaretoken: '{{ csrf_token }}',

             success: function(data){
                 console.log("YEEEEEEEEEEEEEEEEAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHH")
                 $("#dates").html({{ data.dates }});
                },
        });
   });

非常自我解释。它将表单发送到视图,视图使用将用于填充模板中for loop的数据来响应json。

我可以看到数据正在进入控制台的模板

enter image description here

enter image description here

但是你可以看到,在ajax成功的{{data.dates}}之后,我无法识别我的$("#dates").html标记

那么,我怎样才能在模板中使用这个django标签并从ajax响应中获取数据呢?

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:5)

data是纯文本,而不是python变量,因此您无法在{{ }}内打印出来。它看起来像一个JSON对象,因此您可以执行以下操作:

假设您已安装jQuery

$.each(data.dates, function(i, val) {
    $('ul.list-group').empty().append(
        $('<li>').addClass('list-group-item list-group-item-success').text(val)
    )
});

答案 1 :(得分:1)

在页面加载之前,所有Django模板都呈现为html和js,这意味着{{ data.dates }}将不会返回任何内容,因为您的python代码中没有任何data变量。因此,您在js代码中接受.html()

data是一个js对象,所以你可以这样做:

$("#dates").html(data.dates);

但是如果你想将旧模板保留在你需要写的#dates div中:

var html = "";
$(data.dates).each(function(i, days){
    html += "<li class='list-group-item list-group-item-success'>"+days+"</li>"
});
$("#dates>ul").html(html);