一段时间以来,我一直在为此苦思冥想,不确定是否应该继续努力,或者去看医生。
我查询 API 以获取 json 信息。我一直在使用请求,我使用的请求工具的巧妙部分是您可以调用 .json() 并将其转换为 python 中的字典。好吧,现在是棘手的部分;我以我想要的方式保存了所有数据,现在我正在尝试将所有 json 数据以表格格式打印回 HTML,或者基本上逐行打印,同时保持应用 json.dumps 的缩进,这样我就可以逐行添加一些标签。 [见下面的例子]
json.dumps() 在预 block 中显示它时效果很好,现在我被困在如何让 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(',')
保留缩进最优雅的方法是什么?
最佳答案
在 json.dumps() 函数中,您必须设置缩进属性。此外,您还必须使用 '\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
在模板中不要忘记使用安全,但要注意内容是否真的安全。
{{ my_dict|my_filter|safe }}
关于javascript - 在 django 模板 [python] 中使用 json.dump 或 pprint 逐行创建一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692233/