作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有模型“Post”的简单博客应用程序。如果删除“帖子”模型中的所有条目,当我尝试按日期排序的帖子列表中的第一项时,会出现错误,我这样做是:
latest_post = Post.objects.order_by('-date_created')[0]
all_posts = Post.objects.order_by('-date_created')
latest_post = ()
if (all_posts):
latest_post = all_posts[0]
latest_post_list = Post.objects.all().order_by('-date_created')[1:10]
最佳答案
对此并不奇怪,这完全是预期的行为。空列表(或本例中的查询集)的结果为False,因此您永远不会索引到查询集中。虽然如果您尝试索引一个空列表(如您使用第一种方法一样),它将抛出IndexError。
您编写的内容可以使用,但不是最好的imo。更好的写法是这样的
try:
latest_post = Post.objects.order_by('-date_created')[0]
except IndexError:
latest_post = None
try:
latest_post = Post.objects.latest('date_created')
except Post.DoesNotExist:
latest_post = None
get_latest_by = 'date_created'
,然后该行就变成
latest_post = Post.objects.latest()
,甚至无需指定fieldname参数
关于django如何从可能为空的列表中获取第0个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6586040/
我是一名优秀的程序员,十分优秀!