【问题标题】:Google App Engine template loop through two variablesGoogle App Engine 模板循环遍历两个变量
【发布时间】:2012-11-19 01:47:59
【问题描述】:

在 Google 应用引擎上,我想在循环模板中使用两个变量:我需要输入 10 个项目。如果数据存储中已经有一些项目,则显示它们,否则,将该字段留空。我该怎么做?谢谢。

顺便说一句,我注意到 Django 中有“multifor”,但我不知道如何在 GAE 上安装它。

main.py:

def mainPage(webapp2.RequestHandler):
    query = db.Query(Item)
    items = query.fetch(limit=10)
    template_values = {'range': range(10), 'items': items}
    common.render(handler, 'main.html', template_values)

main.html:

<form action=... method="post">
      {% for i in range; for item in items %}
        <input type="text" name="name" value="item.name">
      {% endfor %}
      <input type="submit">
</form>

【问题讨论】:

    标签: python google-app-engine templates


    【解决方案1】:

    不确定您使用的是哪个模板引擎,但是如何创建一个包含 10 个元素的列表并用查询结果填充它呢?比如:

    my_list = [None for _ in range(10)]
    

    然后,一旦获得查询结果,将它们添加到列表中(对象将作为对象列表返回,因此这只是一个概念示例):

    >>> new_list = ['one', 'two', 'three']
    >>> my_list[:len(new_list)] = new_list
    >>> my_list
    ['one', 'two', 'three', None, None, None, None, None, None, None]
    

    现在当你将my_list 传递到模板中时:

    <form action=... method="post">
          {% for item in my_list %}
            {% if item %}
               <input type="text" name="name" value="item.name">
            {% else %}
               <input type="text" name="<your_blank_value>" value="<your_blank>">
            {% endif %}
          {% endfor %}
          <input type="submit">
    </form>
    

    【讨论】:

      【解决方案2】:

      您可能会发现这些想法也很有帮助

      (1) 如果你的模板中的循环是

      {% for item in items %}
      

      那么你可以使用变量{{forloop.counter0}}{{forloop.counter1}}来获取循环的索引。

      (2) 您可以将一个 Python 元组列表传递给您的模板,然后这样编写 for 循环:

      {% for index, name in names %}
      

      【讨论】:

        猜你喜欢
        • 2015-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        • 1970-01-01
        • 2016-01-18
        相关资源
        最近更新 更多