我有一些代码可以从数据存储区中提取项目列表。
他们看起来像这样:
class List(db.Model):
name = db.StringProperty(multiline=True)
class Item(db.Model):
name = db.StringProperty(multiline=True)
created = db.DateTimeProperty(auto_now_add=True)
completed = db.DateTimeProperty(auto_now_add=False)
在Django模板中,我想仅在至少有一个要显示的列表元素时才有条件地显示表头。我很惊讶这是多么困难。
例如:
{% for list in lists %}
<font size="+2"><b>{{ list.name }}</b></font><br>
<table><tr><th> </th><th>item</th><th>created</th><th>completed</th></tr>
{% for item in list.items %}
{% ifnotequal item.completed None %}
<tr><td> </td><td>{{ item.name }} </td><td>{{ item.created }} </td><td>{{ item.completed }} </td></tr>
{% endifnotequal %}
{% endfor %}
</table>
{%endfor%}
如果我在列表中没有符合条件的任何项目,我会找到一张丑陋的空桌子,如下所示:
**todo**
item completed delete
我想做类似的事情,在Django中设置一个变量,如
{% set first = 1 %}
然后当我要为表输出至少一个项目时,请执行类似
的操作 {% for item in list.items %}
{% ifnotequal item.completed None %}
{% if first %}
<table><tr><th> </th><th>item</th><th>created</th><th>completed</th></tr>
{% set first = 0 %}
{% endif %}
.... do the rest of the stuff
{% endifnotequal %}
所以,我试图为Django创建一个自定义标签的rabbithole,它将在appengine中发挥出色,如下所述:
并遇到了很多错误,甚至尝试了这些页面上的建议:
another person with a similar problem
没有任何关键。我使用的是Python 2.7。这不应该是这么难。
答案 0 :(得分:1)
此处不需要任何自定义模板标记。
{% for list in lists %}
{% for item in list.items %}
{% if forloop.first %}
<font size="+2"><b>{{ list.name }}</b></font><br>
<table><tr><th> </th><th>item</th><th>created</th><th>completed</th></tr>
等
所有这一切都是将标题移动到内部for循环中,并仅在第一次迭代时输出它。如果列表为空,它将永远不会进入该内循环,并且永远不会输出标题。