我有这个型号:
class ArticleTagList(db.Model):
article_tags = db.StringListProperty()
在EditArticleHandler
我这样做:
tag_query = ArticleTagList.all()
for tag in tag_query:
for i in range(len(tag.article_tags)):
self.response.out.write(""" <span id="small-tags">
<input type="checkbox" name="article_tag" value="%s">%s </span>"""
% (tag.article_tags[i], tag.article_tags[i]))
但是以字母顺序打印这些标签会很不错。
当然在尝试
tag_query.sort()
给出
AttributeError: 'Query' object has no attribute 'sort'
如何对查询列表进行排序?感谢。
更新
感谢您的回答。我很难理解查询结果,所以不确定我理解下面的评论;但这就是我解决它的方式,我很感激评论为什么这是一个很好的解决方案,或者为什么它不是一个好的解决方案。 (例如,使用range()
进行迭代仍然是错误的吗?)谢谢!
query = ArticleTagList.all()
items = query.get()
items.article_tags.sort()
for i in range(len(items.article_tags)):
self.response.out.write(""" <span id="small-tags">
<input type="checkbox" name="article_tag" value="%s">%s </span>"""
% (items.article_tags[i], items.article_tags[i]))
答案 0 :(得分:2)
你可能想要:
for article_tag_list in tag_query:
article_tags = sorted(article_tag_list.article_tags)
for tag in article_tags:
self.response.out.write("""<span id="small-tags">
<input type="checkbox" name="article_tag" value="%s">%s </span>"""
% (tag, tag))
答案 1 :(得分:1)
请不要通过执行for i in range(len(tag.article_tags))
来遍历列表。没有理由这样做。 for tag in tag.article_tags
效果更好,更像Pythonic。
要回答您的问题,请不要忘记您在此处有两个类似列表的内容:ArticleTagList
个实例集以及每个实例中的article_tags
列表。您是否尝试对所有标签进行排序,无论它们位于哪个标签列表中?在这种情况下,您需要将它们全部加入一个大清单中:
full_list = []
for tag in tag_query:
full_list.extend(list(tag.article_tags))
full_list.sort()
答案 2 :(得分:1)
听起来你正在尝试按顺序打印标签,但是你试图对实例进行排序。你应该做这样的事情:
for taglist in tag_query:
for tag in sorted(taglist.article_tags):
#...
但鉴于您可能总是希望它们按排序顺序排列,在创建实体时,在存储实体之前调用taglist.article_tags.sort()
会更容易,以确保标记按排序顺序存储