【问题标题】:Dynamic variable value on HTML with Django使用 Django 在 HTML 上的动态变量值
【发布时间】:2018-08-15 01:01:06
【问题描述】:

我希望在 HTML 文件中显示一个不断变化的 python 变量(从 websocket 服务器读取),目前我正在使用 Django 标记,如下所示:

templatetags/mytag.py

from django import template
register = template.Library()
current_value = 0

@register.filter
def c_value(placeholder):
    return current_value

#more code that modifies current_value reading from a websocket server

index.html

{% load mytag %}
<script>
function mytimer() {
  setInterval(function(){ 
                $('#stuff').html( {{ placeholder|c_value }} ); 
              }
              , 1000);
}
mytimer();
</script>

#some code from the website

<span id="stuff">Holder</span>

当然,'{{ placeholder|c_value }}' 只输出'current_value' 的第一个值,在这种情况下为 0,因此 index.html 的源代码最终为:

'{{ placeholder|c_value }}'之后的源代码

<script>
function mytimer() {
  setInterval(function(){ 
                $('#stuff').html( 0 ); 
              }
              , 1000);
}
mytimer();
</script>

这是不希望的,因为我们希望每秒打印 'current_value' 的变化值。

这类动态文本的常规方法是什么?非常感谢!

【问题讨论】:

    标签: python html django dynamic tags


    【解决方案1】:

    您需要做一些事情来完成此行为。

    1. 设置一个返回您感兴趣的值的 URL。例如,设置您的网站,以便 URL http://example.com/c_value 返回包含正确信息的响应。以 JSON 格式返回响应通常是个好主意。在 Django 中,您可以使用 JsonResponse 类来执行此操作。假设您返回文本:

      {
          "c_value": "foo"
      }
      
    2. 更改您的页面,使其不再从模板加载变量,而是向您设置的地址发出请求。如果您使用 jQuery,您可以使用 $.ajax 函数来执行此操作(或 $.getJSON,它只是 $.ajax 的简写函数,仅包含 JSON 数据)。假设返回的 JSON 与我在第 1 步中给出的示例相匹配,您可能会在计时器中得到类似的结果。(data 将包含您从服务器发送的 JSON 对象)。

      $.ajax({
          dataType: "json",
          url: "http://example.com/c_value",
          success: function(data) {
              $('#stuff').html(data["c_value"]);
          }
      });
      

    【讨论】:

    • 这解决了,非常感谢!现在看起来很基本,但我根本不知道 AJAX,现在这一切都说得通了。作为记录:1.我为“/c_value”创建了一个视图,以便“my_site/c_value”使用来自服务器的相关数据回答 JSON 2.安装 jQuery,然后使用 AJAX 从“ /c_value' 3. 将此 AJAX 模块插入到我之前使用 setInterval 指定的计时器的函数中再次感谢!
    • 很高兴它对你有用!请记住,您 don't have to use jQuery 发出 AJAX 请求 - 它只是减少了要编写的代码量。
    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 2010-11-08
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2023-03-19
    相关资源
    最近更新 更多