Python 如何强制对queryset求值,以便在视图中捕获异常
在视图渲染期间,我抛出了一个Python 如何强制对queryset求值,以便在视图中捕获异常,python,django,python-3.x,django-views,Python,Django,Python 3.x,Django Views,在视图渲染期间,我抛出了一个操作错误异常 因此,我试图在views.py中渲染之前捕获它 try: dossiersdb = Person.objects.using('dbn').all() print(dossiersdb) except OperationalError as exp : logger.warning("Got %s", exp) return HttpResponse('<h1>OperationalError</h1&
操作错误
异常
因此,我试图在views.py中渲染之前捕获它
try:
dossiersdb = Person.objects.using('dbn').all()
print(dossiersdb)
except OperationalError as exp :
logger.warning("Got %s", exp)
return HttpResponse('<h1>OperationalError</h1>')
试试看:
dossiersdb=Person.objects.using('dbn').all()
打印(档案数据库)
除操作错误外,如exp:
记录器。警告(“已获取%s”,exp)
返回HttpResponse('OperationalError')
但是我需要添加print(dossiersdb)
,因为如果没有它,除了index.html之外,这里没有例外
捕获此异常的正确方法是什么?您可以使用list()
强制对查询集进行求值
try:
dossiersdb = list(Person.objects.using('dbn').all())
except OperationalError as exp :
logger.warning("Got %s", exp)
return HttpResponse('<h1>OperationalError</h1>')
试试看:
dossiersdb=list(Person.objects.using('dbn').all())
除操作错误外,如exp:
记录器。警告(“已获取%s”,exp)
返回HttpResponse('OperationalError')
全局异常挂钩如何
def exception_hook(exctype, value, trace):
# some exception handling logic here.
sys.__excepthook__(exctype, value, trace)
sys.excepthook = exception_hook
Person.objects.using('dbn').all()
只是一个查询,而不是执行。执行是在您访问数据时完成的,例如:list(Person.objects.using('dbn').all())
如果您使用全局异常挂钩,我认为您无法将错误响应返回给用户。如果我使用list()
,dossierdb
queryset是否会计算两次?一个在代码中,另一个在视图中?不,迭代模板中的列表不会导致再次计算queryset。