Django日期过滤器:为什么使用的格式与日期时间库中的格式不同?

发布于 2024-09-05 06:47:15 字数 558 浏览 8 评论 0原文

要使用 date 过滤器格式化日期,您必须使用以下格式:

{{ my_date|date:"Y-m-d" }}

如果您使用标准 datetime 中的 strftime,则必须使用以下格式:

my_date.strftime("%Y-%m-%d")

所以我的问题是......它是不是很难看(我猜这是因为 % 也用于标签,因此被转义或其他什么)?

但这不是主要问题...我想在整个项目中使用 settings.py 中参数化的相同 DATE_FORMAT ,但因此看来我不能!是否有解决方法(例如,在日期格式化为 {{ my_date|date|dream_filter }} 后删除 % 的过滤器,因为如果我只使用DATE_FORMAT = "%Y-%m-%d" 我收到类似 %2001-%6-%12) 的内容?

For formatting a date using date filter you must use the following format :

{{ my_date|date:"Y-m-d" }}

If you use strftime from the standard datetime, you have to use the following :

my_date.strftime("%Y-%m-%d")

So my question is ... isn't it ugly (I guess it is because of the % that is used also for tags, and therefore is escaped or something) ?

But that's not the main question ... I would like to use the same DATE_FORMAT parametrized in settings.py all over the project, but it therefore seems that I cannot ! Is there a work around (for example a filter that removes the % after the date has been formatted like {{ my_date|date|dream_filter }}, because if I just use DATE_FORMAT = "%Y-%m-%d" I got something like %2001-%6-%12)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

空城之時有危險 2024-09-12 06:47:15

使用 DATE_INPUT_FORMATS。

from django.conf import settings
py_format = settings.DATE_INPUT_FORMATS[0]

use DATE_INPUT_FORMATS.

from django.conf import settings
py_format = settings.DATE_INPUT_FORMATS[0]
春风十里 2024-09-12 06:47:15

虽然这可能不是“正确”的答案,但我通过在设置中添加另一个变量并在各处使用它来解决这个问题。我有用 JavaScript、datetime 和 Django 模板格式化的日期,因此我添加了这三个模板。

TIME_ZONE = 'America/Phoenix'  
DATETIME_FORMAT = 'm-d-Y H:m:s T'
DATE_FORMAT = _('m-d-Y')       
JS_DATE_FORMAT = _('mm-dd-yy')
PERC_DATE_FORMAT = _('%m-%d-%Y')

我还为喜欢不同格式的墨西哥客户进行本地化。

While this may not be the "right" answer, I got around this by adding another variable to settings and using it all over the place. I have dates formatted in JavaScript, datetime, and Django templates, so I added all three.

TIME_ZONE = 'America/Phoenix'  
DATETIME_FORMAT = 'm-d-Y H:m:s T'
DATE_FORMAT = _('m-d-Y')       
JS_DATE_FORMAT = _('mm-dd-yy')
PERC_DATE_FORMAT = _('%m-%d-%Y')

I also run them through localization for our customers in Mexico who prefer a different format.

奈何桥上唱咆哮 2024-09-12 06:47:15

不是您主要问题的一部分,但无论如何都很方便。我发现文档中提到日期过滤器格式基于 php 的 日期格式。

Not part of your main question but could be handy anyway. I found it mentioned in the docs that the date filter format is based on php's date format.

临风闻羌笛 2024-09-12 06:47:15

您可以尝试编写自定义过滤器:

#app/templatetags/python_date.py
from datetime import date, datetime

from django import template

register = template.Library()

@register.filter(name='pythondate')
def python_date_filter(value, arg):
    if not type(value) == date and not type(value) == datetime:
        raise Exception('Value passed in to the filter must be a date or a datetime.')

    return value.strftime(str(arg))

模板中的用法:

{% load python_date %}

{{ some_date|pythondate:'%Y-%m-%d' }}

You could try writing a custom filter:

#app/templatetags/python_date.py
from datetime import date, datetime

from django import template

register = template.Library()

@register.filter(name='pythondate')
def python_date_filter(value, arg):
    if not type(value) == date and not type(value) == datetime:
        raise Exception('Value passed in to the filter must be a date or a datetime.')

    return value.strftime(str(arg))

usage in templates:

{% load python_date %}

{{ some_date|pythondate:'%Y-%m-%d' }}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文