Skip to main content
 首页 » 编程设计

Python Django之在 View 中像 json 一样渲染 OrderedDict

2024年09月07日34bonelee

我是 Django 和 Python 的新手。

我在 HTML 使用 python 打印数据

{{ body.example }} 

一些数据在纯文本中呈现正常,但有一个是这样打印的:

[OrderedDict([(u'value', u'5650.00'), (u'operation_number', 130990), (u'comments', u'TESTE'), (u'date', OrderedDict([(u'start', 20160519), (u'end', 20160519)]))])] 

如何将这种类型的数据呈现为 json(因为 api 的结果是 json):

{ 
                      "value": "5650.00", 
                      "operation_number": "130990", 
                      "comments": "TESTE", 
                      "date": { 
                        "start": "20160519", 
                        "end": "20160519" 
                      } 
                    } 

请您参考如下方法:

我在我的一个项目中做了同样的事情 - upvote_system .你可以引用相同的。基本上,您必须自己创建一个解析器/过滤器 - 遵循此 documentation来自 Django 。

使用以下内容创建名为 tojson.py 的文件 (ref from project) :

from django import template 
import json 
register = template.Library() 
 
 
@register.filter(is_safe=True) 
def tojson(value): 
        return byteify(json.loads(json.dumps(value))) 
 
def byteify(input): 
    if isinstance(input, dict): 
        return {byteify(key):byteify(value) for key,value in input.iteritems()} 
    elif isinstance(input, list): 
        return [byteify(element) for element in input] 
    elif isinstance(input, unicode): 
        return input.encode('utf-8') 
    else: 
        return input 

像这样在 html 文件中加载解析器 - {% load tojson%} 然后尝试这样的事情:

your_result_as_json_object = {{your_result|tojson|safe}} 

您现在可以将 your_result_as_json_object 用作 json/dict 并对其进行操作。