连续更新Django for standalone app

时间:2018-04-08 03:34:02

标签: django python-3.x django-views

我想做什么

我正在尝试构建一个将在单台计算机上使用的应用程序,并且仅作为独立的非Web应用程序使用。我只是在用户界面上使用HTML。我想通过重新运行get_context_data来不断更新值,并将其作为新生成的值显示在网站上。这是我想要做的一个例子:

class HomePage(TemplateView):
    template_name = "index.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['number'] = random.randomrange(1,100)
        return context

我将其添加到索引页面如下:

<h2>Welcome to site {{ number }}</h2>

显示为:

enter image description here

我想定期更新该随机数。我只能刷新页面,但这会导致侧面菜单在我不想要的每次页面刷新时返回到默认的扩展状态。

问题

有人能为我提供一个实现这种解决方案的最简单方法的例子吗?

1 个答案:

答案 0 :(得分:1)

如果您只想更新页面上的数字而不是整个页面,那么制作后台ajax请求将是最好的方法。

这不必太复杂。使用JQuery使其变得非常简单。这是一个简单的例子。

在模板标记中,您需要能够识别站点编号,例如:

<span id="site_number">1</span>

模板需要include JQuery并且应该包含JQuery.get()调用,该调用会反复轮询终点:

$(function() {
    function pollSiteNumber() {
        $.get('/site_number/', function(resp) {
            $('#site_number').text(resp['site_number']);  // Update the value
        });
        window.setTimeout(pollSiteNumber, 60000);  // Repeat every minute
    }
    pollSiteNumber();
});

在后端,您应该为/site_number/定义一个返回JsonResponse的视图。

from django.http import JsonResponse

def get_site_number(request):
    data = {'site_number': random.randrange(1, 100)}
    return JsonResponse(data)

并将其连接到urls.py

urlpatterns = [
    ...
    path('site_number/', get_site_number)
]

对于Django Rest Framework,您将实现以下视图:

from rest_framework import views
from rest_framework.response import Response

class SiteNumberView(views.APIView):

    def get(self, request, *args, **kwargs):
        data = {'site_number': random.randrange(1, 100)}
        return Response(data)

urls.py(Django 1.11):

from django.conf.urls import patterns, url

urlpatterns = patterns(
    ...
    url(r'^site_number/', SiteNumberView.as_view())
)