有没有办法在Django模板中执行以下操作?
{% for hop in hops%}
<tr>
<td>{{ hop.name }}</td>
<td>{{ hop.mass }}</td>
<td>{{ hop."boil time" }}</td>
</tr>
{% endfor %}
跳跃。“煮沸时间”不起作用。简单的解决方案是重命名关键boil_time,但我对替代方案感兴趣。
答案 0 :(得分:1)
获得它的最好方法是将属性名称隐藏到另一个变量中,如下所示:
{% for key, value in hop.items %}
{% ifequal key 'boil time' %}
{{ value }}
{% endifequal %}
{% endfor %}
在Django 0.96(Google AppEngine使用的版本)中,模板语言不支持元组扩展,所以它有点丑陋:
{% for hop in hops %}
<tr>
<td>{{ hop.name }}</td>
<td>{{ hop.mass }}</td>
<td>
{% for item in hop.items %}
{% ifequal item.0 'boil time' %}
{{ item.1 }}
{% endifequal %}
{% endfor %}
</td>
</tr>
{% endfor %}
所以,拿走你的代码,我们最终得到:
{% for hop in hops %}
<tr>
<td>{{ hop.name }}</td>
<td>{{ hop.mass }}</td>
<td>
{% for key, value in hop.items %}
{% ifequal key 'boil time' %}
{{ value }}
{% endifequal %}
{% endfor %}
</td>
</tr>
{% endfor %}
在Django 0.96(Google AppEnginge上的版本)中,这变为:
{% for hop in hops %}
<tr>
<td>{{ hop.name }}</td>
<td>{{ hop.mass }}</td>
<td>
{% for item in hop.items %}
{% ifequal item.0 'boil time' %}
{{ item.1 }}
{% endifequal %}
{% endfor %}
</td>
</tr>
{% endfor %}
使用regroup标签,甚至还有更简单的方法:
{% regroup hop.items by 'boil time' as bt %}
{% for item in bt %}
{% if forloop.first %}
{% for item2 in item.list %}
{% for item3 in item2 %}
{% if not forloop.first %}
{{ item3 }}
{% endif %}
{% endfor %}
{% endfor %}
{% endif %}
{% endfor %}
答案 1 :(得分:1)
您可以使用djangosnippets中的get
过滤器:http://www.djangosnippets.org/snippets/1412/
(重命名密钥可能更好......)
答案 2 :(得分:0)
对于django 0.96,这是Google Appengine用于模板的内容,以下作品:
{% for hop in recipe.get_hops %}
{% for item in hop.items %}
{% ifequal item.0 'boil time' %}
<p>{{ item.1 }}</p>
{% endifequal %}
{% endfor %}
{% endfor %}
item.0是键,item.1是值。 Link.