Django的:使用DATE_FORMAT,DATETIME_FORMAT,TIME_FORMAT settings.py中的?

Hey*_*yl1 15 django settings time date

我想在全球范围内(通过我的整个网站,管理和前端)调整日期的方式和时间显示我的喜好,但我无法弄清楚是怎么回事,在settings.py的DATE_FORMAT,DATETIME_FORMAT和TIME_FORMAT变量.

这个问题中它说明了设置被忽略了.问题是超过一年了.在Django文档中,它说它们可以在你拥有USE_L10N = True并且显然在Django 1.2中有所改变时使用.根据这个,但可能有一个错误.

我目前正在使用Django 1.2,当我有USE_L10N = True它时只是忽略settings.py中的日期(时间)格式.当我拥有USE_L10N = False它似乎也忽略了它们.

有没有办法全局定制日期和时间显示?或者我应该创建自己的自定义格式文件,正如Karen在Django用户Google Group帖子中所建议的那样?

Set*_*eth 9

通过源搜索显示DATETIME_FORMAT等仅在django.utils.formats.localize()被调用时使用,并且只django.template.VariableNode在渲染s 时才会被调用.

我不确定什么时候VariableNode在模板渲染中使用了s,但我猜想如果你已经settings.USE_L10N打开并且你有一个VariableNode,那么它将被本地化.

localize 看起来像这样:

def localize(value):
    """
    Checks if value is a localizable type (date, number...) and returns it
    formatted as a string using current locale format
    """
    if settings.USE_L10N:
        if isinstance(value, (decimal.Decimal, float, int)):
            return number_format(value)
        elif isinstance(value, datetime.datetime):
            return date_format(value, 'DATETIME_FORMAT')
        elif isinstance(value, datetime.date):
            return date_format(value)
        elif isinstance(value, datetime.time):
            return time_format(value, 'TIME_FORMAT')
    return value
Run Code Online (Sandbox Code Playgroud)

为了回答你的问题,我可能会编写一个快速上下文处理器来调用localize()上下文中的所有内容.


dr *_*bob 8

有同样的问题,解决方案很简单并且记录在案.每当渲染日期时,您需要指定您希望模板将其呈现为日期/时间/ short_date/datetime(例如,{{ some_date_var | date }}然后它将按照DATE_FORMATsettings.py中的指定呈现它)

例:

>>> from django.conf import settings  # imported to show my variables in settings.py 
>>> settings.DATE_FORMAT #  - showing my values; I modified this value
'm/d/Y'
>>> settings.TIME_FORMAT
'P'
>>> settings.DATETIME_FORMAT
'N j, Y, P'
>>> from django.template import Template, Context
>>> from datetime import datetime
>>> c = Context(dict(moon = datetime(1969, 7, 20, 20, 17, 39))) # Create context with datetime to render in a template
>>> print c['moon'] # This is the default format of a printing datetime object 
1969-07-20 20:17:39
>>> print Template("default formatting : {{ moon }}\n"
                   "use DATE_FORMAT : {{ moon|date }}\n"
                   "use TIME_FORMAT : {{ moon|time }}\n"
                   "use DATETIME_FORMAT: {{ moon|date:'DATETIME_FORMAT' }}\n"
                   "use SHORT_DATETIME_FORMAT: {{ moon|date:'SHORT_DATETIME_FORMAT' }}"
                   ).render(c)
default formatting : 1969-07-20 20:17:39
use DATE_FORMAT : 07/20/1969
use TIME_FORMAT : 8:17 p.m.
use DATETIME_FORMAT: July 20, 1969, 8:17 p.m.
use SHORT_DATETIME_FORMAT: 07/20/1969 8:17 p.m.
Run Code Online (Sandbox Code Playgroud)

这是有道理的; 例如,模板需要知道它是否应该使用DATE_FORMATSHORT_DATE_FORMAT或什么的.


mrt*_*rts 7

你可以重写DATE_FORMATDATETIME_FORMATTIME_FORMAT和其他日期/时间格式时USE_L10N = True作为Django文档中描述的创建自定义格式文件

总之:

  1. 设置FORMAT_MODULE_PATH = 'yourproject.formats'settings.py
  2. 创建目录结构yourproject/formats/enen如果使用英语以外的其他语言环境,则替换为相应的 ISO 639-1 语言环境代码)并将__init__.py文件添加到所有目录以使其成为有效的 Python 模块
  3. 添加formats.py到叶目录,包含要覆盖的格式定义,例如DATE_FORMAT = 'j. F Y'.

此处来自实际项目的示例。