【问题标题】:Uncaught SyntaxError: Unexpected token & in javascript django appUncaught SyntaxError: Unexpected token & in javascript django app
【发布时间】:2018-08-01 06:58:52
【问题描述】:

这是我的功能:

function convert_strings() {
var chart_labels = {{ chartlabels }};
var array_length = chart_labels.length;
for (var i = 0; i < array_length; i++) {
    chart_labels[i] = chart_labels[i].replace(/&#039;/g, "'")
    }
return chart_labels
}

这是我的错误: "Uncaught SyntaxError: Unexpected token &"

function convert_strings() {
var chart_labels = [&#39;CHENNAI LPG RO&#39;, &#39;KOCHI LPG RO&#39;, &#39;BANGALORE LPG RO&#39;, &#39;HUBLI LPG RO&#39;, &#39;MADURAI LPG RO&#39;, &#39;MANGLORE LPG RO&#39;];
var array_length = chart_labels.length;
for (var i = 0; i < array_length; i++) {
    chart_labels[i] = chart_labels[i].replace(/&#039;/g, "'")
    }
return chart_labels
}

请指教:)

【问题讨论】:

  • chart_labels 数组的声明无效。您缺少引号。
  • @Zenoo:我认为这些是添加的,但 转义 :)。数据应转换为非转义 JSON blob。
  • @WillemVanOnsem 这没有多大意义,因为他试图在下一个 RegEx 中删除那些转义的引号。
  • @Zenoo:那正是为了去除转义,但由于它不是在字符串中转义,当然它不起作用。但不幸的是,尝试用字符串处理重写代码文字是人们经常看到的事情:(.
  • @WillemVanOnsem 如何将我的数据转换为非转义的 JSON blob。我希望我的数据是一个字符串数组。

标签: javascript python django


【解决方案1】:

在视图中,您可以将chartlabels 转换为 JSON blob,例如:

import json

def some_view(request):
    # ...
    context['chartlabels_json'] = json.dumps(context['chartlabels'])
    # ...
    return render(request, 'some_template.html', context)

然后,我们可以在模板中以非转义的方式编写 blob:

function convert_strings() {
    return {{ chartlabels_json|safe }};
}

然而,更方便的方法可能是使用django-jsonify [PyPI] 工具,因此只需将charlabel 传递给jsonify 过滤器。

【讨论】:

  • 这在脚本包含在 html 中时有效,但当 javascript 文件是外部并使用 Media 类加载时无效。相反,return {{ chartlabels_json|safe }}; 会导致第二个“{”出现语法错误。当我做return "{{ chartlabels_json|safe }}"; 时,我最终得到了那个确切的字符串。那么,有针对外部 javascript 的解决方案吗?
  • @JoshuaSwain:这当然行不通,因为 Django 不 render 静态文件(在生产中,它甚至也不提供静态文件),而 Django 只能工作在后端,因此模板标签在前端不会“work”。您应该使外部脚本接受带有 JSON 对象的参数。
【解决方案2】:

{{ chart_labels|safe }}

这样就可以了。无需使用 .replace 或 jsonDump

【讨论】:

    【解决方案3】:

    使用以下内容,有关为特殊字符创建正则表达式的更多详细信息,请点击此链接javascript regex for special characters

    var str = '&#39;CHENNAI LPG RO&#39;'
    console.log(str.replace(/\&\#39;/g, "'"));

    【讨论】:

      猜你喜欢
      • 2018-01-07
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多