我有以下模型类:
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专家,但是不应该这样做吗?
更新:
By不起作用我的意思是变量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 %}
或者通过将带有名称和长度的单独字典传递给模板,如果出现类似的问题而没有良好的格式化解决方案。
答案 0 :(得分: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 %}
这可能不起作用取决于你的模板引擎(我只使用了一个,所以我远非专家),但它有望为你提供你想要的东西。