我有一个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}