如果queryset为none怎么办?



我有一个News模型,其中每个实例都有一个唯一的日期。这意味着每天都有一个与之相关的新闻实例。我正在从导航栏重定向到news实例的详细视图。

为了实现这一点,我使用了一个context_processor。context_processor.py文件如下所示:
from news.models import TodayNews
import datetime

def todays_news(request):
todays_news = TodayNews.objects.get(date=datetime.date.today())
return {'news': todays_news} 

只要News模型在该特定日期有实例,这就完全可以工作。否则,它将返回以下错误(这是非常合乎逻辑的):

TodayNews matching query does not exist.

我的问题是,如果查询是空的,例如,如果一个特定的日期没有新闻实例,我怎么能做一些不同的事情?我应该返回什么代替'news': todays_news?

如果没有找到TodayNews对象,可以使用try-except返回None:

from news.models import TodayNews
import datetime
def todays_news(request):
try:
todays_news = TodayNews.objects.get(date=datetime.date.today())
except TodayNews.DoesNotExist:
todays_news = None
return {'news': todays_news}

也可以使用.first()[Django-doc]返回第一个项目,如果没有项目将返回None:

from news.models import TodayNews
import datetime
def todays_news(request):
todays_news = TodayNews.objects.filter(date=datetime.date.today()).first()
return {'news': todays_news}

最新更新