我使用Django作为服务器,并尝试使用ajax定期更新body标记中的内容。 Ajax部分看起来像这样:
<html>
<head>
<meta charset="utf-8">
<title>A Pyecharts Demo</title>
{% for jsfile_name in script_list %}
<script src="{{ host }}/{{ jsfile_name }}.js"></script>
{% endfor %}
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<script>
setInterval(function() {
$.ajax({
url:"/first_pyecharts/",
type:'POST',
data:{ 'last_update':'{{ last_update }}', 'csrfmiddlewaretoken': '{{ csrf_token }}' },
dataType: "html",
success: function (html) {
document.getElementById("body").innerHTML = html
}
});
}, 10000);
</script>
<body id="body">
<!-- contents to be replaced -->
</body>
views.py中的相关代码:
if last_update is None:
update_context(cur)
template = loader.get_template('pyecharts.html')
return HttpResponse(template.render(context, request))
elif latest > datetime.strptime(last_update, '%Y-%m-%d %H:%M:%S'):
update_context(cur)
template = loader.get_template('pyecharts.body.html')
return HttpResponse(template.render(context, request))
else:
template = loader.get_template('pyecharts.body.html')
return HttpResponse(template.render(context, request))
服务器返回一个HttpResponse及其模板,该模板由先前存储的或基于从Ajax提交的“ last_update”的新上下文呈现。
在这里,模板“ pyecharts.html”是完整的页面,上面有“ html”,“ head”,“ script”和“ body”部分。 “ pyecharts.body.html”仅包含“正文”部分中的内容,该内容用于更新网页中的“正文”标签。
但是当ajax从Django获得响应时,它似乎已用响应替换了整个页面,并删除了网页的其余标签。
谁能请我告诉我我做错了什么?是因为模板同时包含上下文和请求吗?考兹,我发现渲染方法只带有来自Django文档的上下文。我不确定。
答案 0 :(得分:0)
最好将动态内容保留在部分模板中。 创建一个部分html文件,并在其中保留动态内容。
使用render_to_string(),将数据发送到模板中
docker run -it -e animals="mouse,rat,kangaroo" image
现在接收模板中的数据,并将其放入#dynamic_content中,就像您之前使用js一样。
from django.template.loader import render_to_string
def get_item(request):
# your code
if last_update is None:
html = render_to_string('your_path_to_the_partial', {'context_variable': variable})
return HttpResponse(html)
.....