1

我似乎无法弄清楚这一点。我有一个 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. 找出正确呈现变量的方法,同时将 {{ 和 }} 留在字符串中

或者

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

任何帮助表示赞赏!

4

1 回答 1

2

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

它不会尝试将字典值作为数据结构来访问 - 相反,它会简单地采用字符串表示形式。

所以,

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

可以在名称为“variable”的 dtemplate 中检索 - 但如果您尝试访问“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模板呈现。

于 2013-02-06T21:27:02.390 回答