我想定期更改页面上显示的注释(数据)。我在这里提到了一个问题,但是数据并没有改变,尽管页面刷新了。
这是我在 views.py
中的代码def index(request):
count = Article.objects.all().count()
comments = Article.objects.values_list('content')[randint(0, count - 1)][0]
context = {
'current_date': datetime.now(),
'title': 'Home',
'comments': comments,
}
return render(request, 'index.html', context)
和 urls.py
urlpatterns = [
url(r'^$', index, name='index'),
url(r'^about/$',about),
# url(r'^comments/$',ArticleCreateView.as_view(), name='comments'),
url(r'^admin/', admin.site.urls),
]
和 index.html
<div>
<div id="comments">
{{ comments }}
</div>
</div>
<script>
var ALARM_URL = "{% url 'index' %}";
function refresh() {
$.ajax({
url: ALARM_URL,
success: function(data) {
$('#comments').html(data);
}
});
};
$(document).ready(function ($) {
refresh();
var int = setInterval("refresh()", 3000);
});
</script>
答案 0 :(得分:1)
您的视图index()
返回一个HTML
页面,因此参数data
包含整个HTML页面。
您可能想要添加仅返回JSON
数据的第二个视图,也许像这样:
views.py
def index_data(request):
# here you return whatever data you need updated in your template
return JsonResponse({
'something_1': 0,
})
urls.py
url(r'^data$', index_data, name='index-data'),
然后在您的AJAX呼叫中执行以下操作:
url: "{% url 'index-data' %}",
success: function(data) {
$('#comments').html(data['something_1']);
}
让我们知道是否有帮助。
编辑
您可能还需要调整计时器;向其传递函数名称,但不对其进行调用,也不要将其作为字符串传递(请参见the docs of setInterval
):
$(document).ready(function ($) {
refresh();
setInterval(refresh, 3000);
});