如何在javascript中连接双花括号和变量

如何在javascript中连接双花括号和变量,javascript,python,django,Javascript,Python,Django,我似乎无法理解这一点。我有一个Python/Django模板,它使用{{variable}}呈现我的变量,我试图在HTML页面上使用Javascript在用户单击按钮时操纵变量 我看到的问题是Javascript似乎对{{{有不同的处理方式,因此当它呈现为HTML时,它不会转换变量(即,它显示“+id+”而不是下面代码中的5): function changeDate() id = 5; html = "{{ variable[" + id + "] }}"; document.ge

我似乎无法理解这一点。我有一个Python/Django模板,它使用{{variable}}呈现我的变量,我试图在HTML页面上使用Javascript在用户单击按钮时操纵变量

我看到的问题是Javascript似乎对{{{有不同的处理方式,因此当它呈现为HTML时,它不会转换变量(即,它显示“+id+”而不是下面代码中的5):

function changeDate()
  id = 5;
  html = "{{ variable[" + id + "] }}";
  document.getElementById('test').innerHTML = html;
我试着这样转义:“{{”这似乎有效(即,它将'id'转换为5),但是Python没有将字符串解释为变量,它只是在页面上将字符串显示为{{variable[5]},而不是该变量的实际值

我猜这是因为Javascript在页面已经呈现之后将DIV转换为新文本,所以Python在第一次呈现页面时从来没有机会转换变量

因此,我认为有两种可能的解决方案:

  • 找出一种在字符串中保留{{和}}的同时正确呈现变量的方法
  • 了解如何让Python在{{variable[5]}的字符串版本通过Javascript显示之前对其进行解释

  • 非常感谢您的帮助!

    Django的模板渲染只需执行搜索/替换排序的替换: 它获取大括号内的字符串,并将该字符串用作传递给它的字典中的键

    它不会尝试以数据结构的形式访问字典值——相反,它只接受字符串表示

    所以

    可以在名为“variable”的数据模板内检索,但如果尝试访问“variable[0]”,则呈现模板应引发NameError,原因很简单,因为“variable[0]”不是上述数据字典上的键

    处理此问题的一种方法是将索引部分推迟到客户端上的javascript代码,并在数据字典上传递对象的javascript编码(json)字符串-因此您需要做一些事情:

    import json
    
    function changeDate()
      id = 5
      variable = ["bla", "ble", "bli", "blo", "blu", "blew"]
      html = """<script> id = {{id}};
                document.write({{variable}}[id]);
                </script>
              """
      data = {"variable": json.dumps(variable), "id": id};
    
    导入json
    函数changeDate()
    id=5
    变量=[“bla”、“ble”、“bli”、“blo”、“blu”、“blu”、“BLOW”]
    html=“”id={{id};
    write({{variable}}[id]);
    """
    data={“variable”:json.dumps(variable),“id”:id};
    

    然后通过
    html
    模板来呈现这些数据。

    您的服务器端代码不知道JS变量。任何JS代码和html都会按原样包含在响应中。所有服务器端代码都会在浏览器获得响应之前运行。因此……您有一个JavaScript函数,希望它使用Django t呈现一些htmlemplates?我认为您误解了客户机-服务器关系的本质…@nnnn您的评论排除了解决方案#2(让Python呈现变量)但不是#1-如果有花括号,为什么Javascript不能呈现变量?否则你重复了我在问题中已经说过的话。你不理解评论…Python运行在服务器上,它生成页面并发送HTML(和JS/CSS)通过管道到达客户端,客户端呈现页面并在浏览器中执行JS。服务器无法看到客户端所做的任何修改,除非客户端显式地将其发回(例如使用AJAX)。不,这是不可能的。您会收到一个错误,因为模板引擎看到
    {insights[6][“+id+”]}
    ,这实际上是在
    insights[6]
    中请求键
    “+id+”
    ,因此出现了错误。模板引擎无法理解
    id
    是什么,因为它是JavaScript。感谢@jsbueno,我最终使用var variable=({{variable[5]})。split(,)提取python变量;然后引用Javascript中的列表值,就像我一开始希望的那样。所以窍门是将整个列表作为数组传递给Javascript,然后使用它。谢谢!
    import json
    
    function changeDate()
      id = 5
      variable = ["bla", "ble", "bli", "blo", "blu", "blew"]
      html = """<script> id = {{id}};
                document.write({{variable}}[id]);
                </script>
              """
      data = {"variable": json.dumps(variable), "id": id};