在Jinja2中迭代对象?

Dan*_*Dan 9 google-app-engine jinja2

我在Google App Engine上使用Jinja2.我有一个ListView,它呈现一个通用模板.目前,我不确定我想要显示什么,所以我只想显示模型的每个属性.

有没有办法迭代对象以输出表格单元格中的每一个?

例如:

{% for record in records %}
<tr>
{% for attribute in record %}
<td>{{ attribute }}</td>
{% endfor %}
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏 谢谢

Met*_*l3d 24

getattr在上下文中设置是一个坏主意(并且已经有内置过滤器attr).Jinja2的提供字典一样访问性能.

我想你应该这样做:

{% for record in records %}
    <tr>
    {% for attribute in record.properties() %}
        <td>{{ record[attribute] }}</td>
    {% endfor %}
    </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这个更好...


fce*_*uti 4

这将在简单的 python 代码中完成:

for attribute in record.properties():
    print '%s: %s' % (attribute, getattr(record, attribute))
Run Code Online (Sandbox Code Playgroud)

您可以将getattr函数放在上下文中,以便您可以在 jinja2 中调用它,如下所示:

{% for record in records %}
    <tr>
    {% for attribute in record.properties() %}
        <td>{{ getattr(record, attribute) }}</td>
    {% endfor %}
    </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

  • 您不应该将“getattr”分配给 jinja 上下文,而应使用“dict like”语法。请检查我上面的答案。我想这个回应是不正确的。 (5认同)