1

我从以下代码中得到列表索引超出范围的错误:

@register.filter(name='get_posts')
def get_posts(topic, limit):
    posts = Post.objects.filter(topic=topic)
    related_post = []
    for i in range(limit):
        related_post.append(posts[i]) [happens at this line]

    return related_post

使用 append 将新元素添加到列表中是否正确?

4

2 回答 2

2

这里的问题是limit可能大于过滤帖子的数量。您应该取两者中的最小值:

for i in range(min(limit, len(posts))):
    related_post.append(posts[i])

但坦率地说,使用切片实现这一点可能要容易得多,然后你就不必费心处理这个min调用了

@register.filter(name='get_posts')
def get_posts(topic, limit):
    posts = Post.objects.filter(topic=topic)
    return posts[:limit]
于 2017-11-28T19:26:38.710 回答
1

这里不需要任何循环,你可以这样做,

@register.filter(name='get_posts')
def get_posts(topic, limit):
    related_post = Post.objects.filter(topic=topic)[:limit]
    return related_post
于 2017-11-28T19:30:34.217 回答