0

我有以下模型类:

class Collection(db.Model):
  name = db.StringProperty()
  text_keys = db.ListProperty(db.Key)

class Text(db.Model):
  name = db.StringProperty()
  content = db.StringProperty()

我正在尝试执行以下操作:

class Collections(webapp.RequestHandler):
  def get(self):
    collections = model.Collection.all() # works fine

    for c in collections:
      c.number_of_texts = len(c.text_keys) # does not work

    template_values = {
      'collections': collections,
    }

我当然不是 python 专家,但这不应该工作吗?

更新:

不起作用我的意思是变量 number_of_texts 没有添加到模型对象中。

在我的 django-template 中,以下代码除了集合名称之外什么都不生成:

{% for c in collections %}
<p>{{c.name}}, number of texts: {{c.number_of_texts}}</p>
{% endfor %}

解决方案:

感谢 RocketDonkey 指出这可以使用 django 格式以更优雅的方式完成:

{% for c in collections %}
<p>{{c.name}}, number of texts: {{c.text_keys|length}}</p>
{% endfor %}

或者通过将带有名称和长度的单独字典传递给模板,如果应该出现没有良好格式解决方案的类似问题。

4

1 回答 1

1

因此,您似乎正在尝试写入模型的number_of_texts属性Collection(不存在:))。如果您只需要获取该列表元素中的项目数,则需要将其存储在不绑定到的单独变量中c

for c in collections:
  number_of_texts = len(c.text_keys)

为了将列表的长度添加到文档中(假设您在其他任何地方都不需要它),请尝试length在模板中使用该函数:

{% for c in collections %}
    <p>{{c.name}}, number of texts: {{c.text_keys|length}}</p>
{% endfor %}

根据您的模板引擎,这可能不起作用(我只使用过一个,所以我远非专家),但它有望为您提供您想要的。

于 2012-08-21T00:23:08.440 回答