将 Python 字典输入到 html 表中
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14652325/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Python dictionary in to html table
提问by just_in
Is there any way to print the python dictionary in to a table in HTML. I have a python dictionary and am sending to HTML by using
有没有办法将python字典打印到HTML表格中。我有一个 python 字典,并通过使用发送到 HTML
return render_template('index.html',result=result)
Now I need to print the elements in result dictionary in to HTML as a table.
现在我需要将结果字典中的元素作为表格打印到 HTML 中。
回答by just_in
Iterate through the dictionary items using result.iteritems()and then write the keys/data into rows of an html table.
使用遍历字典项result.iteritems(),然后将键/数据写入 html 表的行。
回答by Jroosterman
I've had better luck putting the dictionary into a list of lists, then have the html loop through the list and print the table. The python would be:
我有更好的运气将字典放入列表列表,然后让 html 循环遍历列表并打印表格。蟒蛇将是:
Table = []
for key, value in results_dict.iteritems(): # or .items() in Python 3
temp = []
temp.extend([key,value]) #Note that this will change depending on the structure of your dictionary
Table.append(temp)
Then in your html you loop through the table.
然后在你的 html 中循环遍历表格。
<table>
{% for t in table %}
<tr>
{% for i in t %}
<td>{{ i }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
回答by codegeek
Flask uses Jinja as the templating framework. You can just do the following in your template (html)
Flask 使用 Jinja 作为模板框架。您可以在模板 (html) 中执行以下操作
<table>
{% for key, value in result.iteritems() %}
<tr>
<th> {{ key }} </th>
<td> {{ value }} </td>
</tr>
{% endfor %}
</table>
回答by cclauss
tbl_fmt = '''
<table> {}
</table>'''
row_fmt = '''
<tr>
<td>{}</td>
<td>{}</td>
</tr>'''
def dict_to_html_table(in_dict):
return tbl_fmt.format(''.join([row_fmt.format(k,v) for k,v in in_dict.iteritems()]))
回答by Parzival
Check Flask-Table.
检查烧瓶表。
Example from the docs (slightly edited):
文档中的示例(略有编辑):
from flask_table import Table, Col
# Declare your table
class ItemTable(Table):
name = Col('Name')
description = Col('Description')
items = [dict(name='Name1', description='Description1'),
dict(name='Name2', description='Description2'),
dict(name='Name3', description='Description3')]
# Populate the table
table = ItemTable(items)
# Print the html
print(table.__html__())
# or just {{ table }} from within a Jinja template
回答by Ying Wang
For python3, no () after result.items
对于python3,result.items后没有()
<table>
{% for key, value in result.items %}
<tr>
<th> {{ key }} </th>
<td> {{ value }} </td>
</tr>
{% endfor %}
</table>
回答by coder
so I wanted an easy way to generate html from python dictionary with only inline styles (because emails) and couldn't find anything that I was satasfied with so I wrote this,
所以我想要一种简单的方法来从 python 字典中生成 html,只有内联样式(因为电子邮件)并且找不到任何我满意的东西,所以我写了这个,
it's very simple to use and easy to add styles to
使用起来非常简单,而且很容易添加样式
<table style="margin: 3px">
<tr style="background-color: #7cc3a97d">
<th style="color: white">col1</th>
<th style="color: white">col2</th>
<th style="color: white">col3</th>
<th style="color: white">col4</th>
</tr>
<tr style="background-color: aliceblue">
<td style="padding: 1rem">value11</td>
<td style="padding: 1rem">value21</td>
<td style="padding: 1rem">value31</td>
<td style="padding: 1rem">value41</td>
</tr>
<tr style="background-color: #c2d4e4">
<td style="padding: 1rem">value12</td>
<td style="padding: 1rem">value22</td>
<td style="padding: 1rem">value32</td>
<td style="padding: 1rem">value42</td>
</tr>
<tr style="background-color: aliceblue">
<td style="padding: 1rem">value13</td>
<td style="padding: 1rem">value23</td>
<td style="padding: 1rem">value33</td>
<td style="padding: 1rem">value43</td>
</tr>
</table>
lets say you have the following dictionary
假设您有以下字典
myDict = {
'col1' : ['value11', 'value12', 'value13'],
'col2' : ['value21', 'value22', 'value23'],
'col3' : ['value31', 'value32', 'value33'],
'col4' : ['value41', 'value42', 'value43'],
}
it can be converted with
它可以转换为
class HTML:
def __init__(self, Header, tableStyles = {}, trStyles = {}, thStyles = {}):
self.tableStyles = HTML._styleConverter(tableStyles)
trStyles = HTML._styleConverter(trStyles)
thStyles = HTML._styleConverter(thStyles)
self.rows = []
self.Header= f'<tr {trStyles} >'
for th in Header:
self.Header += f'\n<th {thStyles} >{th}</th>'
self.Header += '\n</tr>'
@staticmethod
def _styleConverter(styleDict : dict):
if styleDict == {}:
return ''
styles = ''
for [style, value] in styleDict.items():
styles +=f'{style}: {value}';
return f'style="{styles}"'
def addRow(self, row, trStyles = {}, tdStyles = {}):
trStyles = HTML._styleConverter(trStyles)
tdStyles = HTML._styleConverter(tdStyles)
temp_row = f'\n<tr {trStyles} >'
for td in row:
temp_row += f'\n<td {tdStyles} >{td}</td>'
temp_row += '\n</tr>'
self.rows.append(temp_row)
def __str__(self):
return \
f'''
<table {self.tableStyles} >
{self.Header}
{''.join(self.rows)}
</table>
'''
def dictionaryToHTMLTable(dict : dict):
html = HTML(Header = dict.keys(),
tableStyles={'margin': '3px'},
trStyles={'background-color': '#7cc3a97d'},
thStyles={ 'color': 'white'})
for i, row in enumerate(zip(*dict.values())):
print(row)
if i%2 == 0:
BGC = 'aliceblue'
else:
BGC = '#c2d4e4'
html.addRow(row, trStyles={'background-color' : BGC}, tdStyles={'padding': '1rem'})
return html
and to output
并输出
print(dictionaryToHTMLTable(myDict))

