辞書

2012-04-06 6 views
4

私は辞書を持っている:辞書

field = 

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

マイテンプレートコードは次のとおりです。

<table width="100%" border="0"> 
    <tr> 
     {% for k, v in field.items %} 
      <th>{{ k }}</th> 
     {% endfor %} 
    </tr> 
    <tr> 
     {% for k,v in field.items %} 
      <td> 
       <table width="100%" border="0"> 
       {% for a in v %} 
        <tr class="{% cycle 'odd' 'even' %}"><td>{{ a }}</td></tr> 
       {% endfor %} 
       </table> 
      </td> 
     {% endfor %} 
    </tr> 
</table> 

私は行としてテーブルのヘッダとesach値として辞書のキーを表示したい:

Birthday       Education  Job  Child Sex 
datetime.date(2012, 4, 6)   A1    job1  M 
datetime.date(2012, 4, 27)  A2    job2  F 

しかし、私は2番目のテーブルを挿入する必要があります。辞書のキーを表のヘッダーとして表示し、値を行として表示する方法はありますか?

おかげで、事前

答えて

5

にあなたは、あなたの辞書にテーブルなどのデータを提供する場合読みテンプレートコードは非常に簡単に行うことができます。これは、より次のようになります。

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']] 
} 

次のようになりましたヘッダを反復処理することができます。

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

を、各行が使用して表示することができます。

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

、することができますfield.keys()を使用して'headers'の値を取得します。

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

あなたは、次のループ(2は、行の数である)を使用して'values'を取得できます。

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

またはワンライナーなどを:

rows = [[field[k][i] for k in field.keys()] for i in xrange(2)] 
0

シメオンの答えは私のために働いたが、ネストされたリストのために、行とデータが正しく見えるようにするために、テンプレートと少し違うことをしなければなりませんでした。

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