在 Django 模板中应用本地时区
Applying local timezone in Django templates
我使用 Django 3.1.7 和 postgreSQL 作为数据库。
问题来了,在我的数据库中保存了一个日期后,我尝试在模板中显示访问者的时区,但它仍然显示 UTC 日期。
我的 settings.py 中有这些值:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
我的模特:
class Log(models.Model):
user = models.ForeignKey(to=User, on_delete=models.PROTECT)
log = models.CharField(max_length=255)
type = models.CharField(max_length=50)
date = models.DateTimeField(auto_now_add=True)
company = models.ForeignKey(to=Company, on_delete=models.PROTECT)
我的上下文处理器正在获取对象:
def logs_processor(request):
if request.user.has_perm('loging.can_see_logs'):
try:
logs = Log.objects.filter(company=request.user.company).order_by('-date')[:50]
except TypeError:
logs = None
return {'side_logs': logs}
else:
return {'side_logs': []}
还有我的模板:
{% load tz %}
{% for log in side_logs %}
{{ log.date|localtime }}
{% endfor %}
我尝试不使用 |localtime,但没有成功。
当我像 log.date|timezone:"Europe/Paris"
这样手动指定 TZ 时效果很好。
此外,我准确地说我已经安装了 pytz
。
这是我的日期在数据库中的样子(看起来它们并不幼稚,并按计划放置在 UTC 上):
2021-03-10 04:10:11.849048 +00:00
有什么想法吗?
localtime
filter says that it "enables or disables conversion of aware datetime objects to the current time zone". The current time zone is defined 的文档是通过调用 activate()
显式设置的文档,否则,就是 TIME_ZONE
设置的值。
您没有调用 activate()
,TIME_ZONE
设置的值为 UTC
,因此您会看到 UTC
中的值。
如果您的目标是使用“访问者的时区”,您将不得不做更多的工作,因为服务器无法自动知道用户想要使用的时区。文档 discusses this,并提供了一些您可以如何操作的示例。
我使用 Django 3.1.7 和 postgreSQL 作为数据库。
问题来了,在我的数据库中保存了一个日期后,我尝试在模板中显示访问者的时区,但它仍然显示 UTC 日期。
我的 settings.py 中有这些值:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
我的模特:
class Log(models.Model):
user = models.ForeignKey(to=User, on_delete=models.PROTECT)
log = models.CharField(max_length=255)
type = models.CharField(max_length=50)
date = models.DateTimeField(auto_now_add=True)
company = models.ForeignKey(to=Company, on_delete=models.PROTECT)
我的上下文处理器正在获取对象:
def logs_processor(request):
if request.user.has_perm('loging.can_see_logs'):
try:
logs = Log.objects.filter(company=request.user.company).order_by('-date')[:50]
except TypeError:
logs = None
return {'side_logs': logs}
else:
return {'side_logs': []}
还有我的模板:
{% load tz %}
{% for log in side_logs %}
{{ log.date|localtime }}
{% endfor %}
我尝试不使用 |localtime,但没有成功。
当我像 log.date|timezone:"Europe/Paris"
这样手动指定 TZ 时效果很好。
此外,我准确地说我已经安装了 pytz
。
这是我的日期在数据库中的样子(看起来它们并不幼稚,并按计划放置在 UTC 上):
2021-03-10 04:10:11.849048 +00:00
有什么想法吗?
localtime
filter says that it "enables or disables conversion of aware datetime objects to the current time zone". The current time zone is defined 的文档是通过调用 activate()
显式设置的文档,否则,就是 TIME_ZONE
设置的值。
您没有调用 activate()
,TIME_ZONE
设置的值为 UTC
,因此您会看到 UTC
中的值。
如果您的目标是使用“访问者的时区”,您将不得不做更多的工作,因为服务器无法自动知道用户想要使用的时区。文档 discusses this,并提供了一些您可以如何操作的示例。