django 当地时间

问题描述 投票:0回答:3

我正在尝试在模板中将 utc 时间转换为本地时间,并且出于某种原因这样做:

{% load tz %}

{% localtime on %}
{{ value }}
{% endlocaltime %}

仍然给我 utc 的值

然而

{{ value|localtime }} 

使用我的本地时区设置为我提供值

将 settings.py 中的 USE_TZ 设置为 True 似乎也没有执行任何操作

知道我做错了什么吗?

django django-timezone
3个回答
0
投票

您尝试显示的

{{ value }}
日期/时间对象是一个简单的日期时间对象。朴素的日期时间对象不会在模板标签中转换 - 您的第一个示例,但会在模板过滤器中转换 - 您的第二个示例。

请参阅此处的第一个警告

“Naive”与日期时间对象的创建方式有关。有关如何更改日期/时间对象时间感知的信息 - 允许其在模板标签中使用 - 请查看 This Thread


0
投票

我创建了一个简单的中间件来为您处理所有这些事情:

https://github.com/Miserlou/django-easy-timezones

只需安装并按照说明操作即可完成!

  1. 安装 django-easy-timezones

    
    pip install django-easy-timezones pytz pygeoip
    

  2. 将“easy-timezones”添加到您的 INSTALLED_APPS 设置中,如下所示:

    
    INSTALLED_APPS = (
      ...
      'easy-timezones',
    )
    

  3. 将 EasyTimezoneMiddleware 添加到您的 MIDDLEWARE_CLASSES

    
    MIDDLEWARE_CLASSES = (
      ...
      'easy-timezones.middleware.EasyTimezoneMiddleware',
    )
    

  4. 在您的设置文件中添加MaxMind GeoIP 数据库的路径:

    
    GEOIP_DATABASE = '/path/to/your/geoip/database/GeoIP.dat'
    

  5. 在模板中启用当地时间。

    
    {% load tz %}
        The UTC time is {{ object.date }}
    {% localtime on %}
        The local time is {{ object.date }}
    {% endlocaltime %}
    

  6. 多田!


0
投票

USE_TZ
的值在
{% localtime %}
块内不受尊重。

© www.soinside.com 2019 - 2024. All rights reserved.