【问题标题】:Python List not getting in rendered in javascriptPython List 未在 javascript 中呈现
【发布时间】:2010-01-20 09:27:46
【问题描述】:

我有一个带有两个变量的 javascript,即两个列表,一个是数字列表,另一个是来自 django/python 的字符串列表

numbersvar = [0,1,2,3]
stringsvar = ['a','b','c']

numbersvar 完美呈现,但是当我执行 {{stringsvar}} 时,它不会呈现它。

【问题讨论】:

  • 你能举一个你用来输出这些代码的例子吗?
  • 这是同一张海报之前问题的重复:stackoverflow.com/questions/2094835/…
  • 我不完全相信这是重复的,尽管肯定有一些共同点。
  • 老问题缺少很多东西。 @Olly 我正在使用 django 模板系统来渲染它。 {{numbersvar}} 它呈现了这样的东西。除此之外,我尝试传递一个也没有传递的简单字符串。只有数字列表有效。

标签: javascript python


【解决方案1】:

也许使用 json 模块来创建 javascript 列表会更好?

>>> a = ['stste', 'setset', 'serthjsetj']
>>> b = json.dumps(a)
>>> b
'["stste", "setset", "serthjsetj"]'
>>> json.loads(b)
[u'stste', u'setset', u'serthjsetj']

【讨论】:

  • 如何做到这一点?我可以用类似的方式创建一个字符串吗?
【解决方案2】:

stringsvar 包含什么?列表,还是列表的字符串表示形式?

我建议您将列表的正确 javascript 字符串表示形式从视图方法传递给要呈现的模板。 Python 和 javascript 数组字面量具有相同的语法,因此您可以这样做:

def my_view(request):
    return render_template("...", stringsvar=str(the_list))

在模板中:

<script language="javascript">
stringsvar = {{ stringsvar }};
...
</script>

或者您可以使用 json 序列化程序,这具有额外的好处,您也可以传递其他类型的值。

from django.core import serializers
def my_view(request):
    return render_template("...", stringsvar=serializers.serialize("json", the_list))

【讨论】:

  • stringsvar = ['stringone','stringtwo'] 我尝试将字符串传递给 javascript 也不起作用。如果我序列化变量我如何反序列化它?
  • 你不反序列化它。使用 serializers.serialize("json", ...),您可以将 python 列表转换为其 javascript 文字表示。该文字表示被传递给模板并输出不变。所以我猜你可以说 javascript 在评估脚本时反序列化变量。
猜你喜欢
  • 2011-11-13
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多