javascript - 在 django 模板 [python] 中使用 json.dump 或 pprint 逐行创建一个表

标签 javascript python json django django-templates

一段时间以来,我一直在为此苦思冥想,不确定是否应该继续努力,或者去看医生。

我查询 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;">&nbsp;</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/

相关文章:

asp.net - 我可以将 JSON 字符串转换为 JsonResult 吗?

json - 如何在 JSON 中自定义编码(marshal)映射键

javascript - 在更改事件中将文本附加到 Summernote 元素时出现问题

javascript - 如何动态更改表格列的内容

python - python 的什么特性使这个表达式有效,方括号中包含一个 bool 表达式,就好像它是一个索引或键一样?

python - Matplotlib 固定图形大小和子图位置

javascript - 更改开放图层中矢量要素的绘制属性

javascript - 确定窗口是否处于焦点

python - 返回 Pandas 数据系列中第 n 个最大值的索引和列名

arrays - 在Flutter中解析复杂的json时遇到问题