appengine django动态表,可能是空的

时间:2013-02-12 00:21:53

标签: django google-app-engine customization

我有一些代码可以从数据存储区中提取项目列表。

他们看起来像这样:

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>&nbsp;</th><th>item</th><th>created</th><th>completed</th></tr>
   {% for item in list.items %}
      {% ifnotequal item.completed None %}
        <tr><td>&nbsp;</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>&nbsp;</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中发挥出色,如下所述:

one solution

another solution

并遇到了很多错误,甚至尝试了这些页面上的建议:

another person with a similar problem

没有任何关键。我使用的是Python 2.7。这不应该是这么难。

1 个答案:

答案 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>&nbsp;</th><th>item</th><th>created</th><th>completed</th></tr>

所有这一切都是将标题移动到内部for循环中,并仅在第一次迭代时输出它。如果列表为空,它将永远不会进入该内循环,并且永远不会输出标题。