Django:将 JSON 从视图传递到模板
Django: passing JSON from view to template
在views.py
中,我将时间序列数据存储在字典中如下:
time_series = {"timestamp1": occurrences, "timestamp2": occurrences}
其中每个 timestamp
是 unix 时间并且 occurrences
是一个整数。
有没有办法在 render
函数的上下文中将时间序列数据作为 json 对象传递?
为什么这样做: 我在前端使用 Cal-heatmap,要求数据采用 json 格式。 Ajax 请求目前工作得很好,但我希望尽可能使用 render
方法。
您是否尝试过将 json.dumps(time_series)
之类的内容传递给渲染函数?
如果前端库需要解析 JSON,您可以使用 json
库将 python 字典转换为 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>
将 json.dumps
值传递给模板。它已经是一个有效的 JSON 字符串,所以你不需要解析它或任何东西。仅在模板中渲染时,将其标记为 safe
以防止 HTML 引用。
# 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>
使用 Django templates built-in filter json_script
:
在views.py
中:
render(request, "foo.html", {'time_series_data': time_series})
在模板中foo.html
:
{{ time_series_data|json_script:"time-series-data" }}
在您的脚本中:
const timeSeriesData = JSON.parse(document.getElementById('time-series-data').textContent);
在views.py
中,我将时间序列数据存储在字典中如下:
time_series = {"timestamp1": occurrences, "timestamp2": occurrences}
其中每个 timestamp
是 unix 时间并且 occurrences
是一个整数。
有没有办法在 render
函数的上下文中将时间序列数据作为 json 对象传递?
为什么这样做: 我在前端使用 Cal-heatmap,要求数据采用 json 格式。 Ajax 请求目前工作得很好,但我希望尽可能使用 render
方法。
您是否尝试过将 json.dumps(time_series)
之类的内容传递给渲染函数?
如果前端库需要解析 JSON,您可以使用 json
库将 python 字典转换为 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>
将 json.dumps
值传递给模板。它已经是一个有效的 JSON 字符串,所以你不需要解析它或任何东西。仅在模板中渲染时,将其标记为 safe
以防止 HTML 引用。
# 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>
使用 Django templates built-in filter json_script
:
在views.py
中:
render(request, "foo.html", {'time_series_data': time_series})
在模板中foo.html
:
{{ time_series_data|json_script:"time-series-data" }}
在您的脚本中:
const timeSeriesData = JSON.parse(document.getElementById('time-series-data').textContent);