如何在javascript中将双花括号与变量连接起来

时间:2013-02-06 20:57:05

标签: javascript python django

我似乎无法想出这个。我有一个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永远不会有机会转换变量当它第一次呈现页面时。

所以我认为有两种可能的解决方案:

  1. 找出一种在将{{和}}留在字符串
  2. 中时正确呈现变量的方法

    1. 弄清楚如何让Python在通过Javascript显示之前解释{{variable [5]}}的字符串版本。
    2. 感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

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

它不会尝试将字典值作为数据结构来访问 - 相反,它只是将字符串表示形式化。

所以,

data = {"variable": ["a", "b", "c"] }

可以在dtemplate中检索并命名为“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};

并传递此数据以使用html模板进行渲染。