【发布时间】:2015-06-01 01:16:57
【问题描述】:
我有一个本地化的 Django 应用程序,本地化效果很好,配置还可以……
由于表单需要,我使用__unicode__模型的方法来渲染ModelChoiceFields,但是如何在unicode返回中格式化本地化日期?
在这种方法中我无法访问当前时区,如何正确地向我的用户显示我的 TimeSpanList?目前,它显示 UTC。我尝试了 django.template.defaultfilters.date 和 Simon Charette 的 django.utils.formats.localize,但没有帮助,因为他们可能缺乏上下文数据……
class TimeSpan(models.Model):
start = models.DateTimeField(_("start"))
end = models.DateTimeField(_("end"))
def __unicode__(self):
return u"from UTC:{0} to UTC:{1}".format(self.start, self.end)
class TimeSpanChooserForm(forms.Form):
time_span = forms.ModelChoiceField(
label=_("time span"), queryset=TimeSpan.objects.all())
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request", None)
super(TimeSpanChooserForm, self).__init__(*args, **kwargs)
如何在没有当前请求对象的情况下知道当前语言环境来本地化这些日期时间? (如果有办法)
注意:对我来说__unicode__ 似乎是在 ModelChoiceField 中显示条目的唯一方法。
注 2:对我来说,Yuji 'Tomita' Tomita 评论是目前最好的答案,但它缺乏可用的例子……
【问题讨论】:
-
你不能。不要在模板中使用 unicode 方法,直接访问日期。
-
但是对于一个表单处理的选择字段,那你怎么做呢?
-
您可以随时将请求传递给表单。
-
您不应该考虑严格修改
__unicode__以确定默认情况下在ChoiceField 中填充的内容。这些是方便的自动默认值。除此之外,我会直接修改表格。转换为客户端区域设置对于视图和请求来说似乎非常本地化。否则,这些 TimeSpan 的管理员表示将默认为您自己的管理员 TZ。研究动态修改选择字段选项! -
我添加了一个表单库,以便您可以在我能够接受的完整答案中完成它,您将如何从此处更改具有本地化日期的渲染?
标签: django datetime django-models timezone django-i18n