我一直在看
DEBUG Exception while resolving variable 'exception_type' in template 'unknown'.
在我的django日志中,然后是
VariableDoesNotExist: Failed lookup for key [exception_type] in
后面看起来像是包含请求的字典列表的字符串表示,以及我的整个settings.py文件。
另一个例子:
DEBUG Exception while resolving variable 'lastframe' in template 'unknown'
我觉得我没有足够的信息来调试这个。我所知道的是,在未知模板中有一个名为exception_type
的变量。我的代码在任何地方都不包含字符串'exception_type'。
我该如何调试? 我应该在哪里看?
答案 0 :(得分:0)
该点不是变量'lastframe'或变量'exception_type'
您必须签出您的网址,
所有网址,而不仅仅是后端网址,都包括前端网址。
注意前端URL和中间件(如果您编写了自己的中间件文件,则最好的检查方法是在URL上测试admin)。
我有同样的问题。当我检查url和中间件时,我解决起来很容易。
希望对您有帮助
答案 1 :(得分:0)
这可能为时已晚。我必须花一个多小时来解决这个问题并加以解决。因此,该解决方案可以帮助某人。
我正在使用Django 2.2.6和python 3.6。当我记录错误并配置了AdminEmailHandler时,此问题发生在我身上。不管设置文件中配置的ADMINS是什么,都将执行AdminEmailHandler。如果未设置ADMINS,则不会发送电子邮件。
django.utils.log中的以下代码正在尝试构建要发送的电子邮件消息格式,但由于未发送exc_info而失败。您可以看到我的以下说明。
# exc_info is a tuple (execetion_type, message, exception_value_or_tb)
#
if record.exc_info:
exc_info = record.exc_info
else:
exc_info = (None, record.getMessage(), None)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
message = "%s\n\n%s" % (self.format(no_exc_record), reporter.get_traceback_text())
html_message = reporter.get_traceback_html() if self.include_html else None
self.send_mail(subject, message, fail_silently=True, html_message=html_message)
为避免上述错误,应通过带有以下日志记录的方式传递exc_info。 exc_info将提供exception_type和exception_value。我可以通过这种方式解决问题。因此,在错误日志记录中将捕获的异常作为exc_info传递将解决此问题。
try:
raise Exception("sample exception")
except Exception as e:
logger.error(str(e), exc_info=e)
记录模块有点不正确。根据文档,将 exp_info期望为布尔值。但是logging._log方法是检查exc_info是否存在异常。这就是造成我相信的问题。
# from logging.__init__.py
def error(self, msg, *args, **kwargs):
"""
Log 'msg % args' with severity 'ERROR'.
To pass exception information, use the keyword argument exc_info with
a true value, e.g.
logger.error("Houston, we have a %s", "major problem", exc_info=1)
"""
if self.isEnabledFor(ERROR):
self._log(ERROR, msg, args, **kwargs)
def exception(self, msg, *args, exc_info=True, **kwargs):
"""
Convenience method for logging an ERROR with exception information.
"""
self.error(msg, *args, exc_info=exc_info, **kwargs)
def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False):
"""
Low-level logging routine which creates a LogRecord and then calls
all the handlers of this logger to handle the record.
"""
sinfo = None
if _srcfile:
#IronPython doesn't track Python frames, so findCaller raises an
#exception on some versions of IronPython. We trap it here so that
#IronPython can use logging.
try:
fn, lno, func, sinfo = self.findCaller(stack_info)
except ValueError: # pragma: no cover
fn, lno, func = "(unknown file)", 0, "(unknown function)"
else: # pragma: no cover
fn, lno, func = "(unknown file)", 0, "(unknown function)"
if exc_info:
if isinstance(exc_info, BaseException):
exc_info = (type(exc_info), exc_info, exc_info.__traceback__)
elif not isinstance(exc_info, tuple):
exc_info = sys.exc_info()
record = self.makeRecord(self.name, level, fn, lno, msg, args,
exc_info, func, extra, sinfo)
self.handle(record)