2016-12-06 14 views
0

概要:私は他のウェブサイトから撤去したイベントを表示するウェブサイトを作成しています。ジンジャーのデータ構造

問題: 現時点では、イベントを1日ごとに表示できますが、手動ですべてを一覧表示する必要があります。ループはありません。

私は信じるリストの辞書があるからです。構文は次のとおりです。今日起こったイベントの一つのタイトルを取得するには :D辞書 rows0ある

{{D.rows0[1].title}} 

は日を表す動的変数、rows1rows2が同様に存在しています。 rowsXは、title,date,x,y,zなどのイベントに関する情報を含む。 「Xに関する講演」

私が原因動的変数のデータ構造を反復処理することができない理由のようなものを返します

(私はJinjaでやろうとしました)。私は比較的新しいデータ構造に慣れており、動的データ構造がそのような問題を引き起こすことに気づいていませんでした。

私はさまざまなforループを使いこなし、あきらめました。データ構造を配列の辞書に変更することにしました。配列の辞書をhtmlページに渡すという問題が発生しました。

結論。私の質問は、Jinjaと動的変数を反復処理する方法を見つける必要がありますか?アレイを.htmlファイルに渡す方法を見つけるか、すべて間違っていますか?

さらなる説明

機能は、私は、データベースから情報を抽出

d = {} 
D = {} 

def extractor1(n): 
    d["date" + str(n)] = (datetime.datetime.now() + datetime.timedelta(days=0)).date() 
    D["rows" + str(n)] = db.execute ("SELECT * FROM events WHERE date LIKE :date ORDER BY date", date = str(d["date" + str(n)]) +'%') 
    return d, D 

これは私が神社にforループで反復処理できないデータ構造..アレイの

第2の機能の試みがある:

この機能では、私が得たエラーのためにJinjaで繰り返し処理しようとすることはありませんでした。 Dとdはまだ辞書ですが、私はデータ構造の日付と行がどんなものかを少し創造していました。配列と辞書を試しました。しかし、新しい問題を修正して解決しようとした後、私はこれが最良の方法ではないかもしれないと判断しました。

def extractor2(n): 
    d[date[n]] = (datetime.datetime.now() + datetime.timedelta(days=0)).date() 
    D[rows[n]] = db.execute ("SELECT * FROM events WHERE date LIKE :date ORDER BY date", date = str(str(d[date[n]])) +'%') 
    return d, D 

ジンジャーコードは、機能していないループではまったく無数のものでした。

+0

テンプレートがどのように呼び出されたのか(Pythonコード)は、正しくやっているか完全に間違っているかを確認するのに役立ちます。また、動的変数はどういう意味ですか? – metatoaster

+0

なぜ 'rows0'、' rows1'などを使うのではなく、リストである 'rows'変数を使うのはなぜですか? 1つのコンテナを使用できる場合は、番号付きの変数名を生成しないでください。 'for row in for row:'は些細なことですが、Jinjaで動的変数名を実行しようとするのは悪夢です(Pythonでもそうです)。 –

+1

'D'が辞書の場合、Jinjaの' D'をループしてキーを取得し、 'D [keyname]'を使って値を取得することができます。ソートされたキーをループしたいと思うかもしれませんが、それは* lexicographical * orderingを使用します( 'row10'は' row2'の前に来ます)。 'D.values()'もループできますが、辞書は順序を保持していないので、順序が重要な場合は使用しないでください。 –

答えて

1

あなたは、番号付きのキーを動的に生成することによって、コーナーに自分自身を描いています。あなたには一連の別個のデータではなく、シーケンスがあります。それらのキーを後で再度抽出することは、苦痛になるだけです。

番号付きの辞書キーの代わりにリストを使用してください。あなたは、エントリごとに1つのタプルにまとめた日付とクエリのデータを組み合わせることができます。

results = [] 
for n in range(number_of_entries): 
    date = (datetime.datetime.now() + datetime.timedelta(days=0)).date() 
    rows = db.execute ("SELECT * FROM events WHERE date LIKE :date ORDER BY date", date = str(date) + '%') 
    results.append((date, rows)) 

、あなたの神社テンプレートの結果のリストをループ:代わりにタプルの

{% for date, rows in results %} 
    <tbody><tr><th colspan="3" class="event-date-header">{{ date }}</th></tr> 
    {% for row in rows %} 
     <tr> 
      <td class="event-foo"><a href="{{ row[0] }}">{{ row[1].title }}</a></td> 
      <td class="event-bar"><{{ row[2] }}</td> 
      <td class="event-baz"><{{ row[3] }}</td> 
    {% endfor %} 
    <tbody>  
{% endfor %} 

、エントリーごとに辞書を希望上のJinjaループに示されているようにタプル代入を簡単に使うことはできません。

+0

は、1つの引数だけを取りますか? – Tank

+0

@ Tanc27:はい、申し訳ありませんが、タプルカッコがありませんでした。 –