【问题标题】:Python dictionary in to html tablePython字典到html表
【发布时间】:2013-01-17 02:54:25
【问题描述】:

有没有办法将 python 字典打印到 HTML 表格中。我有一个 python 字典,正在使用

发送到 HTML
return render_template('index.html',result=result)

现在我需要将结果字典中的元素作为表格打印到 HTML 中。

【问题讨论】:

标签: python flask jinja2


【解决方案1】:

使用 result.iteritems() 遍历字典项,然后将键/数据写入 html 表的行。

【讨论】:

  • 我们必须在html页面中做result.iteritems?有文档吗?
【解决方案2】:

我有更好的运气将字典放入列表列表,然后让 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)

然后在你的 html 中循环遍历表格。

<table>
{% for t in table %}
    <tr>
    {% for i in t %}
        <td>{{ i }}</td>
    {% endfor %}
    </tr>
{% endfor %}
 </table>

【讨论】:

  • 我只需要将表格中的某些单元格设为可编辑。我还想在某些单元格上添加“datetimepicker.js”模块。有什么办法吗?
  • 因此,您将表格中的可编辑单元格设置为文本框,其默认值为字典中的任何内容。您可以给文本框一个唯一的 id,以便 datetimepicker 可以获取您想要更改的单元格。
【解决方案3】:

Flask 使用 Jinja 作为模板框架。您可以在模板 (html) 中执行以下操作

<table>
{% for key, value in result.iteritems() %}
   <tr>
        <th> {{ key }} </th>
        <td> {{ value }} </td>
   </tr>
{% endfor %}
</table>

【讨论】:

  • 对于python3,您将使用result.items()
【解决方案4】:
#!/usr/bin/env python3

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.items()))


if __name__ == "__main__":
    d = {key: value for value, key in enumerate("abcdefg")}
    print(d)
    print(dict_to_html_table(d))

【讨论】:

    【解决方案5】:

    检查Flask-Table

    文档中的示例(稍作编辑):

    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
    

    【讨论】:

      【解决方案6】:

      对于python3,result.items后面没有()

      <table>
      {% for key, value in result.items %}
         <tr>
              <th> {{ key }} </th>
              <td> {{ value }} </td>
         </tr>
      {% endfor %}
      </table>
      

      【讨论】:

      • 你需要 items() 而不是 items。
      【解决方案7】:

      所以我想要一种简单的方法来从只有内联样式的 python 字典生成 html(因为电子邮件)并且找不到任何我满意的东西所以我写了这个,

      使用非常简单,添加样式也很简单

      <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>

      假设你有以下字典

      myDict = {
          'col1' : ['value11', 'value12', 'value13'],
          'col2' : ['value21', 'value22', 'value23'],
          'col3' : ['value31', 'value32', 'value33'],
          'col4' : ['value41', 'value42', 'value43'],
      }
      

      可以转换成

      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
      

      输出

      print(dictionaryToHTMLTable(myDict))
      
      

      【讨论】:

        猜你喜欢
        • 2015-05-08
        • 2015-05-31
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        • 2018-05-10
        相关资源
        最近更新 更多