使用带空格的键
在Django的模板中,有没有办法做到像下面这样的事情呢?
{% for hop in hops%}
<tr>
<td>{{ hop.name }}</td>
<td>{{ hop.mass }}</td>
<td>{{ hop."boil time" }}</td>
</tr>
{% endfor %}
这里的“hop."boil time"”是行不通的。一个简单的解决办法是把这个键改成boil_time,但我想知道有没有其他的办法。
4 个回答
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 是值。链接。
1
你可以使用一个来自djangosnippets的get
过滤器:http://www.djangosnippets.org/snippets/1412/
(把键改个名字可能会更好...)
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 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 %}
还有一种更复杂的方法可以实现这个,使用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 %}