【问题标题】:Setting Django admin display times to local time?将 Django 管理员显示时间设置为本地时间?
【发布时间】:2017-07-28 00:54:00
【问题描述】:

当我在管理员中看到日期和时间时,它们以 UTC 显示。我希望它们显示在我当地的时区。我检查了docs 中的TIME_ZONE 设置,尽管它看起来并不是我想要的。 TIME_ZONE 确定存储在数据库中的日期时间的时区,这不是我想要设置的 - 我只想 localize 管理员的时区,但不更改它们在数据库级别的保存方式.

有没有办法做到这一点?

【问题讨论】:

    标签: python django python-3.x


    【解决方案1】:

    在 Django 中:

    默认时区是由 TIME_ZONE 设置定义的时区。

    当前时区是用于渲染的时区。

    所以你应该设置“当前时区”使用:

    django.utils.timezone.activate(时区)

    您可以在中间件中激活它(不要伪造在 settings.py 中将其注册到 MIDDLEWARE):

    import pytz    
    from django.utils import timezone
    
    class TimezoneMiddleware:
        def __init__(self, get_response):
            self.get_response = get_response
    
        def __call__(self, request):
            timezone.activate(pytz.timezone('Asia/Shanghai')
            return self.get_response(request)
    

    这只是一个简单的硬编码。您可以制作一个表单来选择 tzinfo,将其存储在用户的配置文件中并将其加载到用户会话,从中间件的会话中读取 tzinfo。

    官方文档有相关描述: https://docs.djangoproject.com/en/3.0/topics/i18n/timezones/#selecting-the-current-time-zone

    参考:

    https://groups.google.com/forum/#!topic/django-developers/E4aiv3O6vGo

    【讨论】:

      【解决方案2】:

      您可以覆盖 change_list.html、change_form.html 等的模板并执行以下操作:

      {% extends "admin/change_list.html" %}
      {% load tz %}
      
      {% block content %}
          {% timezone "US/Eastern" %}
              {{ block.super }}
          {% endtimezone %}
      {% endblock %}
      

      使用其中一种方法进行操作:

      【讨论】:

      • 我遵循这一点,但对于某些形式,它似乎在没有时区偏移的情况下更新日期时间。你注意到了吗?
      • 上次尝试这个已经有一段时间了。这些不同的表单或字段有什么特别之处吗?
      • 不,如果您按照您提供的说明进行操作,您会注意到日期编辑字段接受 UTC。因此,为了回避这个问题,我只需确保在保存模型之前以 UTC 编辑所有日期。
      【解决方案3】:

      从 2.1 开始,Django 本身不支持此功能。但是https://github.com/charettes/django-sundial 可能会提供您需要的东西——这会添加一个User.timezone 模型字段,以便您可以为每个用户配置它。

      (这个中间件非常简单——实际上它只是调用timezone.activate(zone) 来更改渲染站点的时区)。

      【讨论】:

        【解决方案4】:

        也许您可以尝试设置用户时区。 设置

         USE_TZ = True
        

        Official documentation

        【讨论】:

        • 我已经将它设置为 true -- 该设置控制是否使用时区感知日期。
        猜你喜欢
        • 2016-01-13
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        • 2015-07-19
        • 1970-01-01
        相关资源
        最近更新 更多