使用Django如何自动更新模板上的信息

时间:2016-12-21 17:02:01

标签: python django django-templates django-views

我不是在寻找确切的代码,而是在寻找有关我的问题的一些指导。在我的一个页面上,我想要一个小部分,告诉用户服务器上剩下的磁盘空间,我希望这个信息每30秒更新一次。我已经编写了代码来获取磁盘信息。但是,我不确定如何显示该信息并进行更新。这就是我所拥有的,只是为了给你一个视觉效果:

与我合作的HTML:     {%extends" Checklist / base.html" %}

{% block main_content %}

  <form action="{% url 'Checklist:run' %}" method="post"> {% csrf_token %}
      <input type="submit" name="submit_button" value="Run">
  </form>

  <label for="disk_space">Disk Space: </label>
    <input type="text" name="disk_space" value="{{ disk_space }}" id="disk_space">


{% endblock %}

HTML的视图功能:

def submit(request): #start scrtipt
    submit.preProcess = subprocess.Popen(['chmod', '+x /home/psvuser/Desktop/test.sh'])
    submit.process = subprocess.Popen(['/home/psvuser/Desktop/test.sh'])

    global sem
    sem = True
    disk_space = request.get('disk_space', '')
    disk_space = diskSpace()

    start_time= int(round(time.time()))
    f = open("/home/psvuser/Desktop/writer.txt", "a")
    f.write(str(start_time))
    f.write(", ")

    return render(request, 'Checklist/stop.html')

我知道如何定期刷新页面,但是,我不知道如何显示&#39; disk_space&#39;到html。

2 个答案:

答案 0 :(得分:1)

由于您希望在已加载页面时对服务器执行常规的异步调用,因此我将使用AJAX来解决此问题。

我通常会做这样的事情

def your_django_view(request):
    # magic 
    server_data = '98% left!' 
    response_data['data'] = server_data
    return HttpResponse(json.dumps(response_data), content_type="application/json")

然后在您的视图中,使用一些jquery(或javascript..whatever)来处理所有数据

$.ajax({type: 'POST',
         url: '/function_url/',
         data: {
           },
          success: function(response_data) {
              var server_mem = response_data['data']
             $('#disk_space').val(server_mem);
  })

答案 1 :(得分:0)

submit视图的末尾使用此return语句:

return render_to_response('Checklist/stop.html',
    {'disk_space':disk_space},
    context_instance=RequestContext(request))

render_to_response的第二个参数是您可以在模板中使用的{'key':value, 'key2':value2}字典。