2011-03-27 97 views
2

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

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;不起作用。我们认为我们可以传递数据,但似乎无法处理。

没有任何人有关于它的一些想法?

谢谢!

回答

6

也许你只是需要将其双引号?

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"; 

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

重要的是要记住模板评估/渲染时间之间的区别在你的Python环境和JavaScript的浏览器执行/评估的时候,尤其是当你试图在二者之间传递数据是很重要的。

+0

谢谢。它运作良好。但是,你能告诉我,为什么它需要“”,因为我觉得{{时间}}只是传递一个对象的JavaScript,那么什么是两个对象的意思“?它是一个字符串? – LuciferTian2010 2011-03-27 18:36:43

+0

完成,我已经添加更详细的我最初的帖子。希望它有帮助。 – 2011-03-27 22:04:00

1

转换成JSON为了防止事情,如虚假</script>含串从造成的JavaScript问题的建议。由于JSON字符串看起来像JavaScript文字,因此分配应该足够了。

+0

而对于简单的赋值语句存在'escapejs'滤波器:'escapejs( '<>') - >的u '\\ u003C \\ u003E'' – 2011-08-23 10:56:27

+0

@Tomasz:当然可以,但'\ u003C \ u003E'仍然ISN'没有引号的有效JavaScript。 – 2011-08-23 20:14:24

相关问题