我在让Django在我的本地时区中呈现datetime字段时遇到了很多麻烦。
Settings.py有:
TIME_ZONE = 'UTC'
USE_TZ = True
USE_L10N = True
在我的模型中,我有:
class ExportRecord(models.Model):
[...]
created = models.DateTimeField(auto_now_add=True)
def save(self, *args, **kwargs):
[...]
self.created = timezone.now()
Created作为UTC时间对象存储在MySQL中。
如果我有"2016-11-08 01:25:15"在数据库中创建的字段被填充后,当我渲染我的模板,我希望它被翻译成本地时间的客户端(我在东部时间,所以我希望它是"2016-11-07 20:25:15"。
但是,无论我使用什么标签(例如{{date_obg | localtime}}),日期都不会呈现为我的本地时间。
我安装了tzlocal,当我在我的视图中运行get_localzone()时,它显示'UTC'作为输出。
此外,如果我尝试这样做(将我创建的字段从UTC转换为我的本地时区变量):
lctz = get_localzone()
self.created.replace(tzinfo=pytz.utc).astimezone('lctz')
>>>>2016-11-08 01:25:15
创建的日期与数据库中的日期保持一致(使用UTC)。
这是因为我的谷歌应用程序引擎实例的本地时区是在UTC吗?我如何让我的应用程序模板在我的用户/客户端时区呈现?
激活时区的中间件如下所示:
import pytz
from django.utils import timezone
class get_user_timezone(object):
def process_request(self, request):
if request.user.is_authenticated():
user_timezone =
pytz.timezone(request.user.userprofile.iana_timezone)
if user_timezone:
timezone.activate(user_timezone)
else:
timezone.deactivate()