【问题标题】:how to pass the string from django to javascript如何将字符串从 django 传递到 javascript
【发布时间】:2011-03-28 05:36:03
【问题描述】:

我曾经将字典中的变量传递给 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可能吗?还是必须先在 Django 中将字符串转换为 JSON 字符串,然后再传递给 Javascript?
  2. 如何在Javascript中使用传递的字符串?显然只是使用 var xx = xxxx;不起作用。我们认为我们可以传递数据,但似乎无法处理。

有人知道吗?

谢谢!

【问题讨论】:

    标签: javascript django


    【解决方案1】:

    也许你只需要双引号?

    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 浏览器执行/评估时间之间的差异,尤其是当您尝试在两者之间传递数据时。

    【讨论】:

    • 谢谢。它运作良好。但是你能告诉我为什么它需要“”,因为我认为 {{time}} 只是将一个对象传递给 javascript,那么带有两个“的对象是什么意思?它是一个字符串吗?
    • 完成,我在最初的稀疏帖子中添加了更多细节。希望对您有所帮助。
    【解决方案2】:

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

    【讨论】:

    • 对于简单的分配有escapejs过滤器:escapejs('<>') -> u'\\u003C\\u003E'
    • @Tomasz: 当然可以,但是\u003C\u003E 仍然不是没有引号的有效 JavaScript。
    猜你喜欢
    • 2012-08-23
    • 2014-02-04
    • 1970-01-01
    • 2015-10-10
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2021-12-11
    相关资源
    最近更新 更多