详解Django的 get_list_or_404() 函数:获取列表,如果不存在则返回 404 错误页面

  • Post category:Python

get_list_or_404() 是 Django 框架中的一个非常有用的函数,它可以用于快速获取一个列表数据。在获取数据的同时,如果没有找到数据,函数会抛出 404 异常。

使用方法:get_list_or_404(model, *args, **kwargs)

  • model: 使用该函数的模型类
  • *args: 除 model 以外的参数,可为查询条件
  • **kwargs:查询条件

函数返回值:符合条件的列表数据

实例1

假如我们有这样一个 Book 的数据模型

class Book(models.Model):
    title = models.CharField(max_length=50)
    author = models.CharField(max_length=50)
    publish_time = models.DateField()
    price = models.DecimalField(max_digits=10, decimal_places=2)

我们想要在视图中查询出出版时间在2021年之后的所有书籍,代码如下:

from django.shortcuts import render, get_list_or_404
from .models import Book
from datetime import datetime

def book_list(request):
    books = get_list_or_404(Book, publish_time__gte=datetime(2021,1,1))
    return render(request, 'book_list.html', {'books': books})

上述代码中,使用 get_list_or_404 函数从 Book 模型中查询出出版时间在2021年之后的所有书籍,结果存入变量 books 中。如果没有找到符合条件的数据,该函数会抛出 404 异常。最后再将查询结果传入模板中以便展示。

实例2

通过 get_list_or_404 函数来获取当前用户发布的所有文章

假如我们有这样一个 Article 的数据模型

class Article(models.Model):
    title = models.CharField(max_length=50)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created_time = models.DateTimeField(auto_now_add=True)

我们想要在视图中查询出当前用户发布的所有文章,代码如下:

from django.shortcuts import render, get_list_or_404
from .models import Article

def article_list(request):
    articles = get_list_or_404(Article, author=request.user)
    return render(request, 'article_list.html', {'articles': articles})

上述代码中,使用 get_list_or_404 函数从 Article 模型中查询出当前用户发布的所有文章,结果存入变量 articles 中。如果没有找到符合条件的数据,该函数会抛出 404 异常。最后再将查询结果传入模板中以便展示。

注意事项:

  • 在使用函数时,一定要保证查询结果是一个列表,如果不是,函数会抛出TypeError异常
  • 确保查询条件正确,否则函数会抛出DoesNotExist异常或ValueError异常
  • 由于该函数是查询列表,不建议用于单个数据查询,建议使用 get_object_or_404 函数