Djangoモデルから生成されたJSON文字列をテンプレートのjavascript静的ファイルに渡すことができない理由を突き止めようとしています。結局のところ、問題はモデルレベルではなく(serializers.serializeを使って)、スクリプト自体に同じ文字列を入れても正常に解析されますが、文字列を渡すことはできません。JSON文字列をDjangoテンプレートに渡す
views.py:
def texas(request):
test_json = '{"incidents": [{"field1": 1, "field2": 2}], "debug": 1}'
return render(request, 'tx/texas.html', {'tx': test_json})
TX/texas.html:
{% load staticfiles %}
<html>
<head>
<title>texas map</title>
</head>
<body>
<p id='texas'></p>
<script>
function load_texas() {
return '{{ tx }}';
}
</script>
<script src="{% static 'js/texas.js' %}"></script>
</body>
</html>
JS/texas.jsはJSON.parseで失敗:
:JSONデータの行1、列2で予想プロパティ名または '}'var json_data = load_texas();
var paragraph = document.getElementById('texas');
try {
paragraph.innerHTML = JSON.parse(json_data);
}
catch(err) {
paragraph.innerHTML = err.message;
}
が、同じ文字列がちょうどスクリプトで入力された場合に成功する:
// this JSON string is identical to the one passed in views.py
var json_data = '{"incidents": [{"field1": 1, "field2": 2}], "debug": 1}';
私は、Djangoはコンテキスト変数を処理する方法について何かが足りないのですか?
編集:文字列を渡すため
ないかなりの修正が、私は今のjavascriptへのモデルを得ることの私の元の問題を解決し、テンプレートに直接JSONオブジェクトを渡しています。
views.py:
from django.shortcuts import render
from django.core import serializers
import json
from .models import Tx
def texas(request):
tx_database = Tx.objects.all()
# Django serialize puts square brackets around the string,
# so slice them off.
json_string = serializers.serialize('json', tx_database)[1:-1]
# Load string into JSON object... is this best practice?
test_json = json.loads(json_string)
return render(request, 'tx/texas.html', {'tx': test_json})
(Chromeデベロッパーツールなどで)読み込んだ後のhtmlの外観を確認しましたか? json文字列の周りに二重引用符がありますか? –
@ ger.s.brettテキストは引用符なしでhtmlに表示されます。 – ultraturtle0