2014-11-02 2 views
3

Я следующий ключ значение объекта в Django:как передать UTF-8 данные из Django в JavaScript

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

Обратите внимание, что некоторые из данных на иврите так, когда я сохранить его к БД I Применение:

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

Пожалуйста, попытайтесь помочь мне понять, что я делаю неправильно

ответ

3

Просмотр

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> 

Кроме того, вы можете иметь синтаксическую ошибку в вашем питона Dict (отсутствует закрывающая скобка).

EDIT

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

Но теперь, когда я пытался использовать '{{data.question_text}}' Я получаю пустую строку, я хотел бы использовать этот код вместо использования Javascript для этого –

+0

You не могут получить доступ к членам json в вашем шаблоне. Просто добавьте в свой контекст другой набор переменных. – Yossi