在Django模板中使用json.dump或pprint逐行创建字典表格 [python]
我最近一直在为这个问题苦恼,不知道是继续努力解决,还是去看医生。
我在查询一个API来获取json格式的信息。我使用的是requests库,而我用的requests-tool的一个很酷的功能是可以调用.json(),这样就能把数据转换成Python中的字典。现在问题来了;我已经把所有数据保存成我想要的格式,现在我想把这些json数据打印成HTML表格的形式,或者逐行显示,同时保持json.dumps应用的缩进,这样我就可以逐行添加一些标签。[见下面的例子]
json.dumps()在以预格式块显示数据方面表现得很好,但现在我卡在了如何让django模板重新组织这些数据。
在我看到的大多数json.dumps()的例子中:
{ "a" :"string" "b" :"string2" "c" : [ "yup", "yup", "blegh" ] "d" : { "another_dict": { "another_dict_to_make_it_tricky" : "string!" } } }
而我想要的,或者说我想用模板做的事情,是保持缩进。
table row { row "a" :"string" (search-value-icon) row "b" :"string2" (search-value-icon) row "c" : [ (collapsible) row "yup", row "yup", row "blegh" row ] row "d" : { (collapsible) row "another_dict": { (collapsible) row "another_dict_to_make_it_tricky" : "string!" (search-value-icon) row } row } row }
到目前为止,我尝试过创建一个过滤器jsondump来在模板中返回json字符串,但当我试图将其传递给另一个过滤器str_seperate时,它失败了。我还尝试了其他方法,但大多数情况下返回到模板的信息都丢失了缩进。
[基本上; {% dict_type_from_view |jsondump |str_split %}]
@register.filter def jsondump(obj): return json.dumps(obj,indent=4) @register.filter def str_split(obj): return obj.split(',')
有没有什么优雅的方法可以做到这一点,同时保持缩进?
1 个回答
1
在json.dumps()这个函数里,你需要设置一个叫做indent的属性。还有,你要用'\n'作为分隔符来分开内容,因为如果不这样做,Python会自动处理空格,可能会让结果变得奇怪。最后一步就是把带有前导空格的字符串渲染成一些HTML格式。
你可以试试这个:
import json
import re
from django import template
register = template.Library()
@register.filter
def my_filter(value):
string = json.dumps(value, indent=4)
result = '<div style="font-family:monospace;">'
for row in string.split('\n'):
content = re.sub(r'\s{4}', '<span style="padding-right:1em;"> </span>', row.rstrip())
result += '<p>%s</p>' % content
result += '</div>'
return result
在模板里,别忘了使用safe,但要确保内容真的安全。
{{ my_dict|my_filter|safe }}