Я использую Django в качестве сервера и пытаюсь периодически обновлять содержимое тега 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 с шаблоном, отображаемым ранее сохраненным или новым контекстом на основе 'last_update', отправленного из ajax.
Здесь шаблон «pyecharts.html» представляет собой полную страницу с частями «html», «head», «script» и «body», как показано выше. В то время как «pyecharts.body.html» содержит только содержимое внутри части «body», которая используется для обновления тега «body» внутри веб-страницы.
Но когда ajax получает ответ от Django, кажется, он заменил всю страницу ответом, удалив остальные теги веб-страницы.
Может кто-нибудь, пожалуйста, скажите мне, где я поступил неправильно? Это потому, что шаблон отображается с контекстом и запросом? Потому что я нашел метод рендеринга с контекстом только из документации Django. Я не уверен.