Django - 在模板中格式化/访问 Pandas.to_dict() 数据框
Posted
技术标签:
【中文标题】Django - 在模板中格式化/访问 Pandas.to_dict() 数据框【英文标题】:Django - formating/accessing a Pandas.to_dict() dataframe in a Template 【发布时间】:2018-11-29 23:31:10 【问题描述】:如何在 Django 模板中访问这种类型的字典(字典中的字典)?
我想在 Django 视图/模板中高度自定义 Pandas 生成的 DataFrame。我能够生成我想要呈现的字典,但使用模板标签访问元素已被证明是困难的。
这里是字典的一个例子:
df_dict =
('Key1', 'Key2'):
'Line 1': '',
'Line 2': '',
'Line 3': 53000.0,
'Line 4': -120000.0,
'Line 5': 45000.0
,
('Key3', 'Key2'):
'Line 1': '',
'Line 2': 100.0,
'Line 3': '',
'Line 4': '',
'Line 5': ''
,
('Key4', 'Key2'):
'Line 1': 1000.0,
'Line 2': '',
'Line 3': 2000.0,
'Line 4': '',
'Line 5': ''
我想要的模板输出(不考虑 css 格式)是:
Key1 Key3 Key4
Key2 Key2 Key2
Line 1 1000
Line 2 100
Line 3 53000 2000
Line 4 -120000
Line 5 45000
我已经厌倦了像这样遍历字典的简单模板标签:
% for key, value in object %
<li>key : value</li>
% endfor %
但它只提供:
Key1 : Key2
Key3 : Key2
Key4 : Key2
我不知道如何进入作为上述密钥对值的字典。我也处理过无数的 .dot 符号标签,但没有任何运气。
我还查看了其他可以呈现“漂亮”html 的库,但我想进一步自定义 bootstrap
。我还查看了wenzhixin 的解决方案,但我想要更多的灵活性。
数据结构更新
信息显然来自 QuerySet,但为了从多个模型中合并和旋转,我使用了 Pandas。一旦正确构建和格式化数据框,我就使用了df_dict.to_dict()
方法(其中df_dict
是我的数据框),然后将其传递到上下文字典中。基本上:
context =
#stuff,
'df_dict': df_dict,
#more stuff,
return context
我展示的结构很简单——列索引更有可能包含三个或更多键。值的大小和设计将根据设计保持不变(换句话说,每个键组将有 5 行值字典,或 19 行值字典)。
最后注意@ScottSkiles 缩小差距的地方 - 所以问题here 开始使用字典中的字典,但最后使用模板示例的答案省略了模板中的.items
方法,数据集是一个列表。但是下面的答案是适当的。
【问题讨论】:
字典中的可散列对象是什么?是元组吗?如果可能,您应该在通过上下文将字典传递给模板之前尝试进行尽可能多的预处理。在将 dict 传递给上下文时,您的视图是什么样的? 如果你只是想渲染一个 pandas DataFrame,你可能想看看 django-tables2:django-tables2.readthedocs.io/en/latest @ScottSkiles,我没有遇到过django-tables2
。现在看看。
@ScottSkiles, django-tables2
, IIUC 将 django 查询集对象作为其参数。我无法使用查询集获得正确的数据,所以我使用的是 Pandas DF。
Its features include: Any iterable can be a data-source, but special support for Django querysets is included.
【参考方案1】:
试试:
% for key, values in object.items %
<li>key :
<ul>
% for value in values %
<li>value.name</li>
% endfor %
</ul>
</li>
% endfor %
通过:how to iterate through dictionary in a dictionary in django template?
【讨论】:
以上是关于Django - 在模板中格式化/访问 Pandas.to_dict() 数据框的主要内容,如果未能解决你的问题,请参考以下文章