Dictionary As Table In Django Template

前端 未结 2 637
独厮守ぢ
独厮守ぢ 2021-01-18 12:11

I have a dictionary:

field = 

{
   u\'Birthday:\': [datetime.date(2012, 4, 6), datetime.date(2012, 4, 27)],
   u\'Education\': [u\'A1\', u\'A2\'],
   u\'Job         


        
相关标签:
2条回答
  • 2021-01-18 12:27

    You can make the template code a lot easier to read if you provide the data as a table in your dictionary. It would look more like this:

    field = {
        'headers': [u'Birthday:', u'Education', u'Job', u'Child Sex'],
        'rows': [[datetime.date(2012, 4, 6), u'A1', u'job1', u'M']
                ,[datetime.date(2012, 4, 27), u'A2', u'job2', u'F']]
    }
    

    You can now iterate over the headers as follows:

    <tr>
    {% for header in field.headers %}
        <th>{{ header }}</th>
    {% endfor %}
    </tr>
    

    And each row can be displayed using:

    <tr>    
    {% for value in field.rows %}
        <td>{{ value }}</td>
    {% endfor %}
    </tr>
    

    Now, you can obtain the 'headers' value using field.keys():

    [u'Birthday:', u'Education', u'Job:', u'Child Sex:']
    

    You can get the 'values' using the following loop (where 2 is the number of rows):

    rows = []
    for i in xrange(2):
        row = []
        for k in field.keys():
            row.append(field[k][i])
        rows.append(row)
    

    Or as a one-liner:

    rows = [[field[k][i] for k in field.keys()] for i in xrange(2)]
    
    0 讨论(0)
  • 2021-01-18 12:36

    Simeon's answer worked for me, but I had to do something a little different int the template to get the rows and data looking right because of the nested list:

            {% for row in field.rows %}
                <tr>
                    {% for value in row %}
                        <td>{{value}}</td>
                    {% endfor %}
                </tr>
            {% endfor %}
    
    0 讨论(0)
提交回复
热议问题