对于网络应用,我有一个方法get_stuff_for_payment
,可以将PermissionDenied
提升为Django为用户生成HTTP 403
。
我现在被要求显示友好的错误页面而不是通用403.以下代码执行此操作。但是当我这样做时如何保留堆栈跟踪呢?
try:
stuff = get_stuff_for_payment(id)
except PermissionDenied:
return render(request, 'friendly_error_page.html', context)
答案 0 :(得分:1)
如果您只想记录它,那么就这样做。 logging.exception
方法将记录消息并自动附加回溯:
except PermissionDenied as err:
logger.exception('Permission was denied: %s', err)
答案 1 :(得分:0)
我们在python中自定义模板的错误StackTrace
except PermissionDenied:
return render(request, 'friendly_error_page.html', context)
不是django gor处理403,4xx或5xx错误的好方法。
如果我们想在你的模板(403.html)上显示生成的异常,那么我们可以编写自己的403视图,抓取异常并将其传递给403模板。
import sys,traceback
def custom_403(request):
t = loader.get_template('403.html')
logger.info("custom msg",sys.exc_info()) // for traceback
type, value, tb = sys.exc_info()
return HttpResponseServerError(t.render(Context({
'exception_value': value,
'value':type,
'tb':traceback.format_exception(type, value,
tb)
},RequestContext(request))))
from django.conf.urls.defaults import *
handler403 = 'Project.web.services.views.custom_403'
如果您想向用户显示stacktrace,请使用此模板,否则使用自定义模板
{{ exception_value }}{{value}}{{tb}}