【问题标题】:How to pass chunk of xml from Django db via template to javascript?如何通过模板将 Django db 中的 xml 块传递给 javascript?
【发布时间】:2013-10-09 05:46:19
【问题描述】:

我有一个数据库字段,用于存储另一个 Web 应用程序(即与 django 无关)使用的一大块 xml。我需要获取那块 xml 并将其插入到页面正在使用的一些 javascript 中。

在我的模板中:

var netdata = "{% filter addslashes  %}{{netdata}}{% endfilter %}"

我数据库中的变量 netdata 看起来像 this(多行,包含引号)。我认为“addslashes”过滤器会处理引号。

上面给了我“未终止的字符串文字”错误。 (大概是因为换行)。我需要做什么才能将整个 xml、换行符和所有内容放入有效的 javascript 变量中?

有关更多上下文,我正在尝试使用CytoscapeWeb。在该演示中使用的文件 Compound.js 中,他们得到如下数据:

        $.get(url, function(dt) {
        if (typeof dt !== "string") {
            if (window.ActiveXObject) {
                dt = dt.xml;
            } else {
                dt = (new XMLSerializer()).serializeToString(dt);
            }
        }

网址是the same as above

我正在尝试做类似的事情,但通过 django 模板从我的数据库中传递数据(跳过整个“获取外部文件”部分)。

(我不想在存储到数据库之前先解析 xml,所以请不要这样做)。

【问题讨论】:

    标签: javascript python xml django django-templates


    【解决方案1】:

    您可能应该使用escapejs filter 而不是addlashes。另请注意,您可以直接过滤变量:

    var netdata = "{{ netdata|escapejs }}"
    

    【讨论】:

      【解决方案2】:

      您的问题是生成的 javascript 是一个“多行字符串”,除非您像这样转义每个新行,否则 javascript 无法做到这一点:

      var my_string = "hello \
                       world"
      

      因此,在打印 xml 字符串之前,您可以将每个新行替换为 \ 和一个新行,或者您可以完全删除这些新行。

      我相信escapejs 过滤器会为您做到这一点。 {{ netdata|escapejs }}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-20
        • 2013-02-09
        • 1970-01-01
        • 2013-09-15
        • 2015-08-10
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        相关资源
        最近更新 更多