Python 如何在我的jinja过滤器中使用babel启用时区?
我想根据巴贝尔地区使用时区。我怎样才能做到这一点?我的具体情况是以人性化和本地化的方式显示文章的日期和时间,例如: 昨天 13:21 或者,如果设置了瑞典语参数,将显示 伊戈尔 13:21 如果日期不是昨天或今天,它将打印日期和24小时时间。我想除了处理时区外,我在所有方面都取得了成功:Python 如何在我的jinja过滤器中使用babel启用时区?,python,timezone,internationalization,jinja2,python-babel,Python,Timezone,Internationalization,Jinja2,Python Babel,我想根据巴贝尔地区使用时区。我怎样才能做到这一点?我的具体情况是以人性化和本地化的方式显示文章的日期和时间,例如: 昨天 13:21 或者,如果设置了瑞典语参数,将显示 伊戈尔 13:21 如果日期不是昨天或今天,它将打印日期和24小时时间。我想除了处理时区外,我在所有方面都取得了成功: from webapp2_extras import i18n from webapp2_extras.i18n import lazy_gettext as _ import date
from webapp2_extras import i18n
from webapp2_extras.i18n import lazy_gettext as _
import datetime
from datetime import date, datetime, time
from babel.dates import format_date, format_datetime, format_time
from babel.numbers import format_number, format_decimal, format_percent
def datetimeformat_jinja(value, format='%H:%M / %d-%m-%Y', locale='en'):
now= datetime.now()
info = None
if datetime.date(value) == datetime.date(now):
info= _('Today')
elif (now - value).days < 2:
info= _('Yesterday')
else:
month = value.month
if month == 1:
info = str(value.day)+' '+_('Jan')
elif month == 2:
info = str(value.day)+' '+_('Feb')
elif month == 3:
info = str(value.day)+' '+_('Mar')
elif month == 4:
info = str(value.day)+' '+_('April')
elif month == 5:
info = str(value.day)+' '+_('May')
elif month == 6:
info = str(value.day)+' '+_('June')
elif month == 7:
info = str(value.day)+' '+_('July')
elif month == 8:
info = str(value.day)+' '+_('Aug')
elif month == 9:
info = str(value.day)+' '+_('Sep')
elif month == 10:
info = str(value.day)+' '+_('Oct')
elif month == 11:
info = str(value.day)+' '+_('Nov')
else:
info = str(value.day)+' '+_('Dec')
return info+'<br>'+format_time(value, 'H:mm', locale=locale)
然后我也可以像这样传递I时区参数
{{ article.modified|datetimeformat_jinja(locale='en') }}
过滤器:
def datetimeformat_jinja(value, format='%H:%M / %d-%m-%Y', locale='en', tzinfo=timezone('India')):
now= datetime.now()
info = None
if datetime.date(value) == datetime.date(now):
info= _('Today')
elif (now - value).days < 2:
info= _('Yesterday')
else:
month = value.month
if month == 1:
info = str(value.day)+' '+_('Jan')
elif month == 2:
info = str(value.day)+' '+_('Feb')
elif month == 3:
info = str(value.day)+' '+_('Mar')
elif month == 4:
info = str(value.day)+' '+_('April')
elif month == 5:
info = str(value.day)+' '+_('May')
elif month == 6:
info = str(value.day)+' '+_('June')
elif month == 7:
info = str(value.day)+' '+_('July')
elif month == 8:
info = str(value.day)+' '+_('Aug')
elif month == 9:
info = str(value.day)+' '+_('Sep')
elif month == 10:
info = str(value.day)+' '+_('Oct')
elif month == 11:
info = str(value.day)+' '+_('Nov')
else:
info = str(value.day)+' '+_('Dec')
return info+'<br>'+format_time(value, 'H:mm', tzinfo=tzinfo, locale=locale)
def datetimeformat_jinja(值,格式='%H:%M/%d-%M-%Y',locale='en',tzinfo=时区('India'):
now=datetime.now()
信息=无
如果datetime.date(值)=datetime.date(现在):
信息=(今天)
elif(现在-值)。天数<2:
信息=(昨天)
其他:
月=value.month
如果月份==1:
info=str(value.day)+''+.'Jan')
elif月==2:
info=str(value.day)+''+.'二月')
elif月==3:
info=str(value.day)+''+.'Mar')
elif月==4:
info=str(value.day)+''+.'四月')
elif月==5:
info=str(value.day)+''+.'五月')
elif月==6:
info=str(value.day)+''+(('June'))
elif月==7:
info=str(value.day)+''+.'七月')
elif月==8:
info=str(value.day)+''+.'八月'
elif月==9:
info=str(value.day)+''+.'Sep')
elif月==10:
info=str(value.day)+''+.'十月')
elif月==11:
info=str(value.day)+''+\'Nov')
其他:
info=str(value.day)+''+.'Dec')
返回信息+'
'+格式时间(值'H:mm',tzinfo=tzinfo,locale=locale)
所以,至少我可以将一个时区本地化,但我想知道如何使其动态化
时区应该是文章的时区还是观众的时区?例如,巴西的一名巴西用户发布消息,瑞典的一名瑞典观众查看消息。那么应该使用哪个时区
我总是将时间显示为“墙上的时钟时间”,这意味着使用你的观众在他桌子上的普通时钟上看到的时区。然而,这取决于你
我可以通过模板代码传递时区参数,但是如何从文章或语言环境中知道时区参数呢?在这种情况下,区域设置和时区将不同,因为它是针对印度的,区域设置是英语和时区印度:
{{ article.modified|datetimeformat_jinja(locale='en') }}
丑陋的事实是,时区和地点是两种不同的动物,它们之间只有非常松散的联系。例如,一个在瑞典的印度人仍然想读英语(印地语,…),但是在瑞典时区
当然,您可以针对特定用途对其进行硬编码,但更明智的做法是将区域设置与时区分离,并让用户控制时区设置
至于您的代码,您可能需要从原始日期时间切换到tz感知日期时间
时区应该是文章的时区还是观众的时区?例如,巴西的一名巴西用户发布消息,瑞典的一名瑞典观众查看消息。那么应该使用哪个时区
我总是将时间显示为“墙上的时钟时间”,这意味着使用你的观众在他桌子上的普通时钟上看到的时区。然而,这取决于你
我可以通过模板代码传递时区参数,但是如何从文章或语言环境中知道时区参数呢?在这种情况下,区域设置和时区将不同,因为它是针对印度的,区域设置是英语和时区印度:
{{ article.modified|datetimeformat_jinja(locale='en') }}
丑陋的事实是,时区和地点是两种不同的动物,它们之间只有非常松散的联系。例如,一个在瑞典的印度人仍然想读英语(印地语,…),但是在瑞典时区
当然,您可以针对特定用途对其进行硬编码,但更明智的做法是将区域设置与时区分离,并让用户控制时区设置
至于您的代码,您可能需要从原始日期时间切换到tz感知日期时间。要根据月数获取本地化名称,您可以使用:
calendar.month\u abbr[]
。要根据月数获取本地化名称,您可以使用:calendar.month\u abbr[]
。