我使用 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 %}
我在没有|当地时间的情况下尝试过,但没有成功。
当我手动指定 TZ 时,如
log.date|timezone:"Europe/Paris"
效果很好。
我也明确表示我已经安装了
pytz
。
这是我的日期在数据库中的样子(看起来它们并不天真,并且按计划放置在 UTC 上):
2021-03-10 04:10:11.849048 +00:00
有什么想法吗?
基本上,转到
<app>/settings.py
,然后将 TIME_ZONE
值从 UTC
更改为您自己的本地时区。 Django 将处理显示您本地的日期时间。
来自
TIME_ZONE="UTC"
进入
TIME_ZONE="Asia/Taipei"
无需模板标签和过滤器
<td>{{ date }}</td>