如何在Django代码中按settings.LANGUAGE_CODE格式化日期?
解决Django代码中按配置语言格式化日期的问题
Python的strftime方法依赖系统区域设置,不会自动识别Django的LANGUAGE_CODE配置,所以会输出英文日期。要在代码里生成对应语言的日期字符串,应该用Django自带的国际化工具,以下是两种可靠方案:
方案一:使用django.utils.formats.date_format
这个方法和模板中的date过滤器逻辑一致,会自动遵循当前激活的语言设置(对应settings.LANGUAGE_CODE),格式语法也和模板过滤器相同:
from django.utils.formats import date_format self.success_message = ( f"Eingeschrieben für <b>{date_format(self.date, 'l')}</b>, " f"den {date_format(self.date, 'j. F Y')}." )
'l'对应完整星期名(如德语的Sonntag)'F'对应完整月份名(如德语的Juni)- 无需手动处理日期前的0,
date_format会自动按语言区域的习惯格式化
方案二:手动指定语言环境(适用于非视图场景)
如果在视图以外的代码(如模型、信号)中使用,Django不会自动激活语言,需要手动指定:
from django.conf import settings from django.utils.translation import activate from django.utils.formats import date_format # 激活配置的语言 activate(settings.LANGUAGE_CODE) weekday = date_format(self.date, 'l') date_str = date_format(self.date, 'j. F Y') self.success_message = f"Eingeschrieben für <b>{weekday}</b>, den {date_str}."
为什么不能用strftime?
Python的strftime依赖系统安装的区域包(locale),且不会读取Django的国际化配置,即使你设置了LANGUAGE_CODE,它依然会使用系统默认的区域格式,所以无法输出符合Django配置的多语言日期。
内容的提问来源于stack exchange,提问作者germannp
相关产品推荐
相关产品推荐

