如何将字符串从django传递给javascript

时间:2011-03-27 04:05:56

标签: javascript django

我曾经在Django中将字典方面的变量传递给HTML模板而没有任何问题。现在我计划在HTML文件中添加一些javascript,并使用相同的方式“{{}}”从javascript中的字典中获取对象。字典中的所有对象实际上都是字符串。 在Django中,代码是:

dataDict = {}
dataDict["time"] = json.dumps(",".join(timeList))
return render_to_response("xxxx.html", dataDict,\
         context_instance=RequestContext(request))

在HTML页面和Javscript中,我只想使用字符串变量来接收它,然后解析我想要的信息,我们的代码是:

var test = {{ time }};

但似乎Django无法将数据传递给Javascript中的字符串变量。所以我有两个问题:

  1. 是否有一些特殊类型的变量可以将数据从Django传递给Javascript。 JSON是否可行?或者在传递给Javascript之前首先将字符串转换为Django中的JSON字符串是必须的吗?
  2. 如何在Javascript中使用传递的字符串?显然只是使用var xx = xxxx;不起作用。我们认为我们可以传递数据,但似乎无法处理。
  3. 有人对此有所了解吗?

    谢谢!

2 个答案:

答案 0 :(得分:7)

也许你只需要双引号?

var test = "{{time}}";

我们假设dataDict['time'] = "1:30 PM, 2:30 PM"。渲染模板时,它会创建此文本(使用查看源自行验证):

var test = 1:30 PM, 2:30 PM;

如您所见,这不是有效的JavaScript。当你加倍引用它时就会变成这样:

var test = "1:30 PM, 2:30 PM";

同样,您需要使用插值属性双引号DOM元素,例如<a href="{{url}}">..</a>。 Django builtin template filter docs有很多例子。

重要的是要记住Python环境中的模板评估/渲染时间与JavaScript浏览器执行/评估时间之间的差异,尤其是当您尝试在两者之间传递数据时。

答案 1 :(得分:1)

建议转换为JSON,以防止包含字符串的虚假</script>等内容导致JavaScript出现问题。分配应该足够了,因为JSON字符串看起来像JavaScript文字。