提问人:Neel 提问时间:8/3/2023 更新时间:8/3/2023 访问量:24
Django 自定义过滤器 - 转换 datetime
Django custom filter - to convert datetime
问:
我正在开发一个 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日期时间而不是转换后的时间。我错过了什么?
答:
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
你是对的。第一种方法没有奏效。第二个将其转换为自定义过滤器功能的工作,将其转换为字符串可以正确显示
评论