在阅读了一些关于此的博客后,我找不到答案,也在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。
我可以看到数据正在进入控制台的模板
但是你可以看到,在ajax成功的{{data.dates}}
之后,我无法识别我的$("#dates").html
标记
那么,我怎样才能在模板中使用这个django标签并从ajax响应中获取数据呢?
提前感谢您提供的任何帮助。
答案 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);