-1

以下是我认为可行的方法:我有一个按游戏索引并包含 gameSlots 的字典 确认:{{gameSlot.game.name}} 有效(其他 gameSlot.game.x 属性也可以) 确认:assignGameSlotsInMyGames 是持有 {game: [gameSlot1, gameSlot1]} 但是: {% for gameSlot2 in assignedGameSlotsInMyGames[gameSlot.game] %} 没有迭代

我在做一些明显错误的事情吗?(如果需要,我可以发布更完整的代码 - 我已经用一个非常丑陋的解决方法替换了代码,但很乐意将其带回以显示测试结果等)。

添加了更多详细信息....
数据为:assignedGameSlotsInMyGames 包含一个游戏(名为“Later”),该游戏具有两个分配的游戏槽。

解决方法打印这些游戏插槽的内容:

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

是我正在遍历属于特定用户的所有游戏插槽。当我显示该 gameSlot 时,我想包含有关该 gameSlot 引用的游戏的其他信息。由于我尝试(如下)直接引用该游戏没有奏效,我遍历所有游戏并在“外循环”中使用与当前游戏匹配的游戏(蹩脚,是的 - 这就是我发布问题的原因)。注意:对于我正在测试的示例,只有一款名为“Later”的游戏。

有一个外部循环正在遍历所有 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 回答