Django 自定义过滤器 - 转换 datetime

Django custom filter - to convert datetime

提问人:Neel 提问时间:8/3/2023 更新时间:8/3/2023 访问量:24

问:

我正在开发一个 Django 应用程序,需要在 UI 上显示日期时间。datetime 是 UTC 格式,我需要将其转换为用户的本地时区。为此,我在我的应用程序中实现了这个自定义过滤器

from django import template
import pytz

register = template.Library()

@register.filter
def convert_to_localtime(value, user_tz):
    if not value:
        return value
    
    local_tz = pytz.timezone(user_tz)
    local_time = value.astimezone(local_tz)
    print("Conversion function",value, local_time)
    return local_time

在模板中,我像这样使用这个自定义过滤器

{%load custom_filters%}
<span class="text-center match-date-time">{{ match.start_time|convert_to_localtime:user_tz}}</span>

我可以看到自定义过滤器正在执行并将日期时间正确转换为本地时区,因为我可以看到 print 语句的以下输出

转换函数 2023-08-03 17:30:00+00:00 2023-08-03 23:00:00+05:30

但是在UI上,我仍然是UTC日期时间而不是转换后的时间。我错过了什么?

django 日期时间 django-filter

评论


答:

0赞 Amin 8/3/2023 #1

我认为问题在于显示转换时间。

试试这个:

{% load custom_filters %}

<span class="text-center match-date-time">
    {{ match.start_time|convert_to_localtime:user_tz|date:"Y-m-d H:i:s" }}
</span>

或者尝试在您的函数中执行此操作:

from django import template
import pytz

register = template.Library()

@register.filter
def convert_to_localtime(value, user_tz):
    if not value:
        return value
    
    local_tz = pytz.timezone(user_tz)
    local_time = value.astimezone(local_tz)
    formatted_time = local_time.strftime('%Y-%m-%d %H:%M:%S')
    return formatted_time

评论

0赞 Neel 8/3/2023
你是对的。第一种方法没有奏效。第二个将其转换为自定义过滤器功能的工作,将其转换为字符串可以正确显示