web-dev-qa-db-ja.com

Django:ビューからテンプレートにJSONを渡す

views.py、時系列データを次のように辞書に保存しています。

time_series = {"timestamp1": occurrences, "timestamp2": occurrences}

ここで、各timestampはUNIX時間であり、occurrencesは整数です。

render関数のコンテキストで時系列データをjsonオブジェクトとして渡す方法はありますか?

これを行う理由:フロントエンドで Cal-heatmap を使用していますが、json形式のデータが必要です。今のところ、Ajaxリクエストは問題なく機能しますが、できればrenderアプローチを使用したいのですが。

10
jkarimi

フロントエンドライブラリでJSONを解析する必要がある場合は、jsonライブラリを使用してpython dictをJSONの有効な文字列に変換します。escapejsフィルターを使用します

import json

def foo(request):
    json_string = json.dumps(<time_series>)
    render(request, "foo.html", {'time_series_json_string': json_string})


<script>
    var jsonObject = JSON.parse('{{ time_series_json_string | escapejs }}');
</script>
31

json.dumps(time_series)のようなものをレンダー関数に渡してみましたか?

2
Romeo Mihalcea

json.dumps値をテンプレートに。すでに有効なJSON文字列なので、解析する必要はありません。テンプレートでレンダリングする場合のみ、HTMLの引用を防ぐためにsafeとしてマークしてください。

# views.py
def foo(request):
    time_series_json = json.dumps(time_series)
    return render(request, 
                  "template.html", 
                  context={'time_series': time_series_json})

# in the template
<script>
    const timeSeries = {{ time_series | safe }};
</script>
1
Milan Cermak