定期在Django模板上更改div中的数据

时间:2018-08-09 10:59:54

标签: javascript html ajax django

我想定期更改页面上显示的注释(数据)。我在这里提到了一个问题,但是数据并没有改变,尽管页面刷新了。

这是我在 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>

1 个答案:

答案 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);
});