Django:如何在视图中获取日期格式?

37

我需要在视图中使用SHORT_DATETIME_FORMAT。

def manage_list(request):

    user = User.objects.filter().order_by('date_joined') 
    usrs = [] 
    for usr in user: 
        usrs.append({
            _('First name'):  usr.first_name, 
            _('Last name'):   usr.last_name,
            _('Email'):       usr.email,
            _('Active'):      usr.is_active,
            _('Superuser'):   usr.is_superuser,
            _('Staff'):       usr.is_staff,
            _('Joined date'): usr.date_joined.strftime(SHORT_DATETIME_FORMAT),    
        }) 

    data = simplejson.dumps(usrs, indent=4)
    return HttpResponse(data, mimetype='application/json')

我认为usr.date_joined的类型是“日期字段”。我想根据Django的语言环境格式化这个数据。所以这个字符串可能会有所帮助。我知道有一个模板过滤器可以做到这一点,但我只想在视图中格式化usr.date_joined而不改变Django选择的语言环境。

如果有其他方法,请提供示例。最终,我只想按照Django的语言环境获得格式化后的日期和时间,我认为这个常数应该做到名副其实。

6个回答

75

您需要查找的是django.utils.formats模块。我在文档中能找到的唯一参考资料是Django 1.2发布说明

请记住,只有在USE_L10N设置为True时,本地化才有效。您可以按以下方式使用date_format。

from datetime import datetime
from django.utils import formats
date_joined = datetime.now()
formatted_datetime = formats.date_format(date_joined, "SHORT_DATETIME_FORMAT")

2
from django.utils import formats 是一样的吗?https://docs.djangoproject.com/en/dev/releases/1.2/#date-format-helper-functions 或许有人会觉得这个很有用。谢谢Alasdair!=) - holms
糟糕,那是个打错字了。memset.utils 是我们公司的一个内部模块!正确的模块应该是 django.utils - Alasdair
from django.conf import settingssettings.SHORT_DATE_FORMAT 有什么问题吗? - Burhan Khalid
我理解的意思是SHORT_DATE_FORMAT返回的值将是特定于区域设置的值。 - Burhan Khalid
@BurhanKhalid 这篇文章已经快18个月了。我删除了第一个版本,因为它不能在我正在运行的Django 1.4.X上工作。剩下的解决方案通过从设置中导入SHORT_DATE_FORMAT并没有变得更短。 - Alasdair
我刚刚意识到这篇文章的日期! - Burhan Khalid

27

你可能想尝试使用django.utils.dateformat.DateFormat。

>>> from datetime import datetime
>>> dt = datetime.now()
>>> from django.utils.dateformat import DateFormat
>>> from django.utils.formats import get_format
>>> df = DateFormat(dt)
>>> df.format(get_format('DATE_FORMAT'))
u'April 23, 2013'
>>> df.format('Y-m-d')
u'2013-04-23'

使用 Python 获取更多信息:

import django
help(django.utils.dateformat)

属性错误:模块“django.utils”没有“dateformat”属性。 - b264

13

要在视图中使用 Django 的 date 过滤器,可以使用 defaultfilters,例如:

from django.template import defaultfilters

formatted_date = defaultfilters.date(usr.date_joined, "SHORT_DATETIME_FORMAT")

5
使用localize快捷方式。
>>> from django.utils.formats import localize
>>> from datetime import datetime
>>>
>>> print(datetime.now())
2016-12-18 19:30:35.786818
>>> print(localize(datetime.now()))
18 декабря 2016 г. 19:30

2
from django.utils.formats import date_format

date_format(usr.date_joined)

这并没有为现有的答案增添任何内容。date_format已经被建议过了。 - Cris Luengo
1
是的,我回答后才注意到这一点。但是,我的答案比Alasdair给出的更简洁。 - User3759685

0
截至今天,对我有效的是将 USE_L10N 设置为 True
然后导入一些工具:
from django.utils import (dateformat, formats)

可以这样使用:
dateformat.format(my_date_object, formats.get_format('DATE_FORMAT'))

请注意,my_date_object 应该是一个 datetime 对象。
还有一些可用的格式列表:
  • DECIMAL_SEPARATOR
  • THOUSAND_SEPARATOR
  • NUMBER_GROUPING
  • FIRST_DAY_OF_WEEK
  • MONTH_DAY_FORMAT
  • TIME_FORMAT
  • DATE_FORMAT
  • DATETIME_FORMAT
  • SHORT_DATE_FORMAT
  • SHORT_DATETIME_FORMAT
  • YEAR_MONTH_FORMAT
  • DATE_INPUT_FORMATS
  • TIME_INPUT_FORMATS
  • DATETIME_INPUT_FORMATS
名称相当自说明...
请参见:https://github.com/django/django/blob/main/django/utils/formats.py

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接