如何将 utf-8 数据从 Django 传递到 javascript

Posted

技术标签:

【中文标题】如何将 utf-8 数据从 Django 传递到 javascript【英文标题】:how to pass utf-8 data from Django to javascript 【发布时间】:2014-12-29 09:04:59 【问题描述】:

我在 Django 中有以下键值对象:

data = 
    "id": 1,
    "question_text": "אנא בחר אחת מהתשובות הבאות",
    "answers": [
     
        "label" : "תשובה 1",
        "value" : 1,
        "count" : 30
     ,
     
        "label" : "תשובה 2",
        "value" : 2,
        "count" : 30
     ,
     
        "label" : "תשובה 3",
        "value" : 3,
        "count" : 30
     ,

请注意,有些数据是希伯来语的,所以当我将其保存到我使用的数据库中时:

unicode(self.answer_text).encode('utf-8')

当我尝试将此对象发送到视图时,以便在 Django 模板和 javascript 中使用它

我用过这条线:

return render(request, 'reports/report.html', 'data': data )

在我使用的视图中:

var question_data =  data  #in order to get the data object that was sent to the view

但我得到了这个元素:

'bad': 45, 'good': 55, 'question_text': u'\u05e2\u05d3 \u05db\u05de\u05d4 \u05d0\u05ea\u05d4 \u05de\u05e8\u05d5\u05e6\u05d4 \u05d0\u05d5 \u05dc\u05d0 \u05de\u05e8\u05d5\u05e6\u05d4 \u05de\u05d1\u05d2\u05d3\u05d9 \u05e2\u05dc\u05d9\u05ea \u05d1\u05d0\u05d5\u05e4\u05df \u05db\u05dc\u05dc\u05d9?', 'id': u'8', 'answers': ['value': 30, 'label': u'\u05de\u05d0\u05d5\u05d3 \u05de\u05e8\u05d5\u05e6\u05d4', 'value': 25, 'label': u'\u05d3\u05d9 \u05de\u05e8\u05d5\u05e6\u05d4', 'value': 20, 'label': u'\u05dc\u05d0 \u05db\u05dc \u05db\u05da \u05de\u05e8\u05d5\u05e6\u05d4', 'value': 25, 'label': u'\u05db\u05dc\u05dc \u05dc\u05d0 \u05de\u05e8\u05d5\u05e6\u05d4']

控制台中出现这个错误:

SyntaxError: Unexpected token '&'. Expected a property name

我也试过用:

var question_data =  data|safe 

我得到了这个错误:

[Error] SyntaxError: Unexpected string literal '\u05e2\u05d3 ...

我正在使用 Django 1.7 和 Python 2.7.6

请尝试帮助我理解我做错了什么

【问题讨论】:

【参考方案1】:

要在 Views Django 中显示 JSON,您必须使用过滤器转义数据:

var categories = JSON.parse(" categories|escapejs ");

【讨论】:

【参考方案2】:

查看

import json
# ....
return render(request, 'reports/report.html', 'data': json.dumps(data) )

模板

<script>
  var question_data = JSON.parse(" data|escapejs ");
  console.log(question_data);
</script>

另外,您的 python dict 中可能存在语法错误(缺少右括号)。

编辑

return render(request, 'reports/report.html', 'data': data, 'data_json': json.dumps(data) )

【讨论】:

但是现在当我尝试使用 data.question_text 时,我得到一个空字符串,我想使用这段代码而不是使用 Javascript 您无法访问模板中的 json 成员。只需将另一组变量添加到您的上下文中。

以上是关于如何将 utf-8 数据从 Django 传递到 javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据值从视图传递到 Django 中的模板?

将数据从 Django 传递到 D3

如何将数据从回调传递到Django中的另一个视图?

如何将 jquery datepicker 从模板传递到 python Django 中查看?

将信息从 javascript 传递到 django 应用程序并返回

Django,如何将变量从 Django 管理员传递到模板?