如何摆脱pytz UnknownTimeZoneError在我的Django日志?



我在Windows Server 2022上部署了一个Django应用程序,错误日志中充斥着以下消息:

pytz.exceptions.UnknownTimeZoneError: 'Europe/Paris'r, referer: https://my_server_url
During handling of the above exception, another exception occurred

我已经检查了我的pytz安装,它似乎工作得很好:

# run Windows cmd as Apache service account
python manage.py shell
from django.conf import settings
import pytz
pytz.timezone(settings.TIME_ZONE)
<DstTzInfo 'Europe/Paris' LMT+0:09:00 STD>
settings.TIME_ZONE in pytz.all_timezones
True

我尝试卸载和重新安装虚拟环境并升级/降级pytz,但没有成功。

我不知道如何进一步调查这个问题以及如何解决它。

下面是应用程序的设置:

Apache 2.4.52 (built from sources)
Python 3.10.4
Mod_wsgi 4.9.0
Django 3.2.9
pytz 2021.3

编辑1。

以下是相关的Django设置(我大多使用默认设置):
TIME_ZONE = 'Europe/Paris'
USE_TZ = False
USE_L10N = False # also tried with True, same error

编辑2。

这里是完整的错误回溯。

# when any exception is raised in the app
During handling of the above exception, another exception occurred:r, referer: https://my_server_url
r, referer: https://my_server_url
Traceback (most recent call last):r, referer: https://my_server_url
File "path_to_venv\django\core\handlers\exception.py", line 47, in innerr, referer: https://my_server_url
response = get_response(request)r, referer: https://my_server_url
File "path_to_venv\django\utils\deprecation.py", line 117, in __call__r, referer: https://my_server_url
response = response or self.get_response(request)r, referer: https://my_server_url
File "path_to_venv\django\core\handlers\exception.py", line 49, in innerr, referer: https://my_server_url
response = response_for_exception(request, exc)r, referer: https://my_server_url
File "path_to_venv\django\core\handlers\exception.py", line 115, in response_for_exceptionr, referer: https://my_server_url
log_response(r, referer: https://my_server_url
File "path_to_venv\django\utils\log.py", line 224, in log_responser, referer: https://my_server_url
getattr(logger, level)(r, referer: https://my_server_url
File "C:\Program Files\Python3.10\Lib\logging\__init__.py", line 1497, in errorr, referer: https://my_server_url
self._log(ERROR, msg, args, **kwargs)r, referer: https://my_server_url
File "C:\Program Files\Python3.10\Lib\logging\__init__.py", line 1615, in _logr, referer: https://my_server_url
self.handle(record)r, referer: https://my_server_url
File "C:\Program Files\Python3.10\Lib\logging\__init__.py", line 1625, in handler, referer: https://my_server_url
self.callHandlers(record)r, referer: https://my_server_url
File "C:\Program Files\Python3.10\Lib\logging\__init__.py", line 1687, in callHandlersr, referer: https://my_server_url
hdlr.handle(record)r, referer: https://my_server_url
File "C:\Program Files\Python3.10\Lib\logging\__init__.py", line 967, in handler, referer: https://my_server_url
self.emit(record)r, referer: https://my_server_url
File "path_to_venv\django\utils\log.py", line 120, in emitr, referer: https://my_server_url
message = "%s\n\n%s" % (self.format(no_exc_record), reporter.get_traceback_text())r, referer: https://my_server_url
File "path_to_venv\django\views\debug.py", line 353, in get_traceback_textr, referer: https://my_server_url
return t.render(c)r, referer: https://my_server_url
File "path_to_venv\django\template\base.py", line 170, in renderr, referer: https://my_server_url
return self._render(context)r, referer: https://my_server_url
File "path_to_venv\django\template\base.py", line 162, in _renderr, referer: https://my_server_url
return self.nodelist.render(context)r, referer: https://my_server_url
File "path_to_venv\django\template\base.py", line 938, in renderr, referer: https://my_server_url
bit = node.render_annotated(context)r, referer: https://my_server_url
File "path_to_venv\django\template\base.py", line 905, in render_annotatedr, referer: https://my_server_url
return self.render(context)r, referer: https://my_server_url
File "path_to_venv\django\template\base.py", line 988, in renderr, referer: https://my_server_url
output = self.filter_expression.resolve(context)r, referer: https://my_server_url
File "path_to_venv\django\template\base.py", line 698, in resolver, referer: https://my_server_url
new_obj = func(obj, *arg_vals)r, referer: https://my_server_url
File "path_to_venv\django\template\defaultfilters.py", line 717, in dater, referer: https://my_server_url
return formats.date_format(value, arg)r, referer: https://my_server_url
File "path_to_venv\django\utils\formats.py", line 152, in date_formatr, referer: https://my_server_url
return dateformat.format(value, get_format(format or 'DATE_FORMAT', use_l10n=use_l10n))r, referer: https://my_server_url
File "path_to_venv\django\utils\dateformat.py", line 326, in formatr, referer: https://my_server_url
df = DateFormat(value)r, referer: https://my_server_url
File "path_to_venv\django\utils\dateformat.py", line 59, in __init__r, referer: https://my_server_url
self.timezone = get_default_timezone()r, referer: https://my_server_url
File "path_to_venv\django\utils\timezone.py", line 52, in get_default_timezoner, referer: https://my_server_url
return pytz.timezone(settings.TIME_ZONE)r, referer: https://my_server_url
File "path_to_venv\pytz\__init__.py", line 188, in timezoner, referer: https://my_server_url
raise UnknownTimeZoneError(zone)r, referer: https://my_server_url

Django 4默认禁用时区。据此,您应该将USE_TZ设置为True以启用它。Django 5默认会启用它。有关此设置的更多信息和相关设置的链接,请参见USE_TZ。

您在Windows服务器上使用linux时区格式。这里是映射

最新更新