【问题标题】:Django : View returns JSON content_dictionary, how to decode in JavascriptDjango:查看返回JSON content_dictionary,如何在Javascript中解码
【发布时间】:2011-01-03 08:26:08
【问题描述】:

让我解释一下我正在尝试做什么,如果有人可以指出正确的方法以及解决我遇到问题的方法,那就太好了!

有人输入网址

www.ABC.com/showItem/Blackberry

我在我的数据库中查找“黑莓”并找到它的数据,现在我想一页显示它的详细信息。

因此在视图中我这样做

return_data=simplejson.dumps(response_dict)

return render_to_response('workmodule/show_item_details.html', {"item_complete_data": return_data}, context_instance=RequestContext(request))

在 myHTML 我这样做

data_from_django = {{ farm_complete_data }}

Question 1:这是在 HTML 中访问 JSON 数据的正确方法吗?不知何故,我认为应该有更好/更清洁的方法。

Question 2:另一个问题是所有引号都替换为""",因此 javscript 中断。如果上面是正确的方法,我如何正确“解码”字符串。

Note : 我之前使用过 jquery 的 .ajax 函数,如果您已经在页面上并正在调用后端,它会非常有用。在这种情况下,视图以与上述相同的方式返回了数据,并且数据没有被转义。或者,当我的 ajax 成功:或错误:函数处理它时,它似乎是这样的。

感谢您花时间看这个。

【问题讨论】:

    标签: javascript django json simplejson


    【解决方案1】:

    问题 1:实际上是这样。

    问题 2:不要对其进行解码,将其通过管道传输到安全:{{farm_complete_data|safe}},这样它就不会尝试为您进行 html 转义。

    【讨论】:

    • 谢谢你!那行得通。这很好,因为我是从 db 加载的。如果不安全怎么办?只是问问。
    • 这构成了安全威胁。例如,尝试使用任何包含 </script> 的 JSON。修复方法是在dumps-ing 时使用JSONEncoderForHTML,如here 所述。
    • Trevor 是对的,至少如果您允许用户在数据中输入任意字符串,您将传递回 JSON - 但是当我最初在 2010 年初发布此答案时,SimpleJSON 尚未添加JSONEncoderForHTML 类 :)(它是 SimpleJSON 2.1 中的新功能,几个月后发布)。
    【解决方案2】:

    为什么要把它传递给模板呢?您只需要 JSON,因此在视图中执行以下操作:

    return simplejson.dumps(response_dict)
    

    那么就不用担心编码/引用了。

    【讨论】:

    • 嗯,这只是数据。我需要格式化并显示它,因此需要将它分配给一个 javscript 变量。
    • 这没有意义。如果您在 Django 模板中进行格式化,为什么要将其转换为 JSON?但如果您通过 Ajax 调用发送它,Javascript 将进行格式化和显示。
    • 也许我没有正确解释。视图发回的数据负载是大量信息。它是一个相当复杂的对象。我没有使用过 dJangos 模板系统,但无论哪种情况,这个复杂的对象都会在页面生命周期中使用多次。它可以编辑,更改可以丢弃到原始文件或最终保存。它不是一个简单的渲染。我也会看看 django 模板,看看是否可以用另一种方式完成。如果您认为我的方法不正确,请告诉我。谢谢,我非常感谢您对此的关注。
    猜你喜欢
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多