-1

これが私がうまくいくと思ったものです: ゲームによって索引付けされ、gameSlots を含む辞書があります。 {{gameSlot.game.name}} が有効であることを確認しました (および他の gameSlot.game.x プロパティも問題ありません) {game: [gameSlot1, gameSlot1]} を保持していますが: {% for gameSlot2 in assignedGameSlotsInMyGames[gameSlot.game] %} には反復がありません

私は明らかに間違ったことをしていますか?(必要に応じて、より完全なコードを投稿できます。コードをかなり醜い回避策に置き換えましたが、テスト結果などを表示するために元に戻して喜んでいます)。

詳細が追加されました....
データは次のとおりです。

回避策は、これらの gameSlots の内容を出力します:

{% for game, gameSlots in assignedGameSlotsInMyGames.iteritems() %}
  {% if gameSlot.game.name == game.name %}
    {% for gameSlot2 in gameSlots %}
      <tr>
        <td> {{gameSlot2.user.email}} </td>
        <td> {{gameSlot2.gameCharacter.characterType}} </td>
      </tr>
    {% endfor %}
  {% endif %}
{% endfor %}

追記:ある理由:

if gameSlot.game.name == game.name

特定のユーザーに属するすべての gameSlots を反復処理していることです。その gameSlot を表示するときに、その gameSlot が参照するゲームに関する追加情報を含めたいと考えています。そのゲームを直接参照する試み (以下) がうまくいかなかったので、すべてのゲームをループして、現在のゲームに一致するものを「外側のループ」で使用します (ラメ、はい - そのため、質問を投稿しています)。注: 私がテストした例では、"Later" という名前のゲームが 1 つだけあります。

すべての gameSlot.games を移動する外側のループがあります。唯一の反復は、gameSlot.game.name == "Later" の場合です。この余分なループではなく、次のものを使用できると思いました。

{% for gameSlot2 in assignedGameSlotsInMyGames[gameSlot.game] %}
  <tr><td>Iteration</td></tr>
{% endfor %}

assignedGameSlotsInMyGames は、gameSlots である値を持つゲーム オブジェクトによってインデックス付けされたディクショナリであるため、これは機能するはずだと考えていました。しかし、印刷された反復はありません。

次のコードのデバッグ:

<tr><td colspan="6">TestCode - gameSlot.game = {{gameSlot.game}}, assignedGameSlotsInMyGames[gameSlot.game] = {{assignedGameSlotsInMyGames[gameSlot.game]}} </td></tr>
<tr><td colspan="6">TestCode - gameSlot.game.name = {{gameSlot.game.name}}, assignedGameSlotsInMyGames = {{assignedGameSlotsInMyGames}}</td></tr>
<tr><td colspan="6">Test from Ellochka - assignedGameSlotsInMyGames.game = {{assignedGameSlotsInMyGames.game}}</td></tr>

出力あり:

TestCode - gameSlot.game = , assignedGameSlotsInMyGames[gameSlot.game] =
TestCode - gameSlot.game.name = Later, assignedGameSlotsInMyGames = {: [, ]}
Test from Ellochka - assignedGameSlotsInMyGames.game =

これは、Jinja2 テンプレート (および Python) を使用する初めての経験であるため、非常に混乱する可能性があります。

4

1 に答える 1

0
from jinja2 import Template

ts = """
{% for game, gameSlots in assignedGameSlotsInMyGames.iteritems() %}
{% for gameSlot2 in gameSlots %}
<tr>
<td> {{gameSlot2.user.email}} </td>
<td> {{gameSlot2.gameCharacter.characterType}} </td>
</tr>
{% endfor %}
{% endfor %}
"""

t = Template(ts)

d = {'assignedGameSlotsInMyGames':
     {'game1': [{'user': {'email': 'a@a.ru'},
                 'gameCharacter':{'characterType':'testCharacterType1'}},
                {'user': {'email': 'b@b.ru'},
                 'gameCharacter':{'characterType':'testCharacterType2'}}],
      'game2': [{'user': {'email': 'a2@a.ru'},
                 'gameCharacter':{'characterType':'testCharacterType12'}},
                {'user': {'email': 'b2@b.ru'},
                 'gameCharacter':{'characterType':'testCharacterType22'}}]
     }
}

print t.render(d)

出力は次のとおりです。

<tr>
<td> a2@a.ru </td>
<td> testCharacterType12 </td>
</tr>

<tr>
<td> b2@b.ru </td>
<td> testCharacterType22 </td>
</tr>



<tr>
<td> a@a.ru </td>
<td> testCharacterType1 </td>
</tr>

<tr>
<td> b@b.ru </td>
<td> testCharacterType2 </td>
</tr>

あなたのテンプレートでは、私は何{% if gameSlot.game.name == game.name %}であるかを理解していません。キーgameSlotを個別に渡しますか、それとも単なるタイプミスであり、gameSlotsを作成するつもりですか?

非常に明確な答えを得るには、レンダリング関数(またはなど)に渡す辞書の構造(例)について書くことができます。それでも明確でない場合は、エラーがどこにあるかを説明します。

更新しました

ts = """
{% for g in games %}
    {% for v in ags[g.game]%}
        {{ v }}
    {% endfor %}
{% endfor %}
"""

d = {
      'games':[{'game':'A'},
           {'game':'B'},
           {'game':'C'}],
      'ags':{'A':['ONE','TWO','THREE'],'B':['1','2','3']}
}

t = Template(ts)
print t.render(d)

出力:

ONE

TWO

THREE



1

2

3

私が提案できる唯一のことは、データを渡して正しく機能せず、不適切に処理することです。ドキュメントを参照してください。

于 2013-03-11T04:42:36.910 に答える