【发布时间】:2017-08-25 22:20:24
【问题描述】:
我有一个 Django (v1.10.6) 项目,其中包含一些带有日期时间字段的模型,例如:
created_at = models.DateTimeField(auto_now_add=True)
存储在没有时区信息的 PostgreSQL 数据库中:
created_at timestamp without time zone NOT NULL
postgresql.conf:
timezone = 'UTC'
我希望我的应用程序的所有日期都显示在America/Bogota 时区(它不应该取决于用户的实际时区),所以我的settings.py 文件具有以下配置:
TIME_ZONE = 'America/Bogota'
USE_I18N = False
USE_L10N = True
USE_TZ = True
SHORT_DATETIME_FORMAT = 'd-m-Y H:i:s'
SHORT_DATE_FORMAT = 'd-m-Y'
TIME_FORMAT = 'H:i:s'
但是当我写的时候
{{ object.created_at|date:'SHORT_DATETIME_FORMAT' }}
在模板中,它仍然以UTC 格式显示日期。
更新:
我添加了以下中间件,但没有帮助:
class TimezoneMiddleware(MiddlewareMixin):
def process_request(self, request):
timezone.activate(pytz.timezone(settings.TIME_ZONE))
更新 2:
它的工作方式如下:
import pytz
from django.utils import timezone
timezone.is_naive(object.created_at) # True
object.created_at.replace(tzinfo=timezone.utc)
(强制日期在UTC 时区,然后将其传递给没有localize 过滤器的模板)但我不明白为什么当USE_TZ 设置为True 时Django 仍然返回天真的日期时间。
【问题讨论】:
标签: django timezone django-timezone