Django 中的 get_list_or_404 和 get_object_or_404 之间的确切区别是啥?

Posted

技术标签:

【中文标题】Django 中的 get_list_or_404 和 get_object_or_404 之间的确切区别是啥?【英文标题】:What is the exact difference between get_list_or_404 and get_object_or_404 in Django?Django 中的 get_list_or_404 和 get_object_or_404 之间的确切区别是什么? 【发布时间】:2020-09-14 11:49:17 【问题描述】:

我对 Django 中的 get_list_or_404 和 get_object_or_404 之间的区别感到有些困惑。我正在使用对象一来获取特定用户的帖子,但想了解更多关于如何使用 get_list_or_404 的信息。

【问题讨论】:

注意:get_list_or_404 是一个未被充分利用的 API 有充分的理由:它将已经是一个有序序列变成一个不再可以查询的可写有序序列。很少有需要这样做的用例。如果您的下一步是遍历列表并呈现输出或传递给模板,那么您不需要 【参考方案1】:
def get_object_or_404(klass, *args, **kwargs):
Calls get() on a given model manager, but it raises Http404 instead of the model’s DoesNotExist exception.

is shortcut for

try:
    return Model.objects.get(pk=...)
except Model.DoesNotExist:
    raise Http404()
def get_list_or_404(klass, *args, **kwargs):
Returns the result of filter() on a given model manager cast to a list, raising Http404 if the resulting list is empty.

is shortcut for

obj_list = list(Model.objects.filter(title=...))
if not obj_list:
    raise Http404()
return obj_list

作为 get_object_or_404 快捷方式调用 get(),如果找到多个对象,则会引发 MultipleObjectsReturned 异常。

由于 get_list_or_404 快捷方式返回一个列表,除非返回的列表不为空,否则不会引发此类异常。

【讨论】:

以上是关于Django 中的 get_list_or_404 和 get_object_or_404 之间的确切区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

django 网站对静态文件给出 404 错误

Django:404 模板中的静态文件

分页:如何设置页数?

Django_404_403_500页面处理

django 知识点小结

django http404 详解