如何从 django 模板在 html 页面上打印漂亮的 JSON?

新手上路,请多包涵

为什么在 python 中,我可以使用下面的 python 示例漂亮地打印 JSON,但在 django 模板中,它不起作用?如何在 django 模板中漂亮地打印 JSON?

Python:

 import requests, json
url = 'https://api.example.com/details'
r = requests.get(url)
json_data = r.json()
json_pretty = json.dumps(json_data, sort_keys=True, indent=4)
print (json_pretty)

django views.py:

 def json_list(request):
    url = 'https://api.example.com/details'
    r = requests.get(url)
    json_data = r.json()
    json_pretty = json.dumps(json_data, sort_keys=True, indent=4)

    context = {
        "json_pretty": json_pretty,
        }
    return render(request, "json_output.html", context)

模板:

 <div>{{ json_pretty }}</div>

原文由 bayman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 512
2 个回答

如果你只是想保持缩进,你可以使用

return HttpResponse(json_pretty,content_type="application/json")

如果必须使用 django 模板,您可以按照 Klaus 的建议使用 HTML <pre> 标记。所以你的模板变成了

<pre>{{ json_pretty }}</pre>

原文由 Jose Cherian 发布,翻译遵循 CC BY-SA 3.0 许可协议

为什么不直接使用 pprint 过滤器

看法

context["my_json"] = {i: i for i in range(100)}

模板

<pre>{{ my_json }}</pre>
vs
<pre>{{ my_json | pprint }}</pre>

截图

在此处输入图像描述

或者,如果您想要更好的东西,请创建自定义过滤器

templatetags/extras.py

 import json

from django import template

register = template.Library()

@register.filter
def pretty_json(value):
    return json.dumps(value, indent=4)

模板

{% load extras %}
<pre>{{ my_json | pretty_json }}</pre>

原文由 Dev Aggarwal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题