📜  django 模板中的日期格式 (1)

📅  最后修改于: 2023-12-03 15:14:44.298000             🧑  作者: Mango

Django模板中的日期格式

在Django模板中,日期格式化是一个经常使用的功能。在模板中,我们可以使用变量和过滤器来格式化日期。

变量

Django的模板语言(DTL)中的变量可以包含日期对象。这些对象可以是从视图函数传递过来的,也可以是在模板中定义的。

下面是一个从视图函数传递日期对象的示例:

from django.shortcuts import render
from datetime import datetime

def my_view(request):
    my_date = datetime.now()
    return render(request, 'my_template.html', {'my_date': my_date})

在模板中,我们可以使用{{ my_date }}来输出日期对象。

过滤器

如果我们想要以不同的格式呈现日期,我们就需要使用过滤器。过滤器是一种可以在变量后面添加的函数,用于修改变量的输出。

基本格式化

Django中内置了一些常用的日期格式化过滤器,如下:

| 过滤器 | 描述 | 样例输入 | 样例输出 | | --- | --- | --- | --- | | date | 将日期格式化为日期字符串 | {{ my_date\|date:"M d, Y" }} | Jul 28, 2022 | | time | 将时间格式化为时间字符串 | {{ my_time\|time:"g:i A" }} | 9:25 PM | | datetime | 将日期和时间格式化为日期/时间字符串 | {{ my_datetime\|datetime:"M d, Y g:i A" }} | Jul 28, 2022 9:25 PM |

本地化格式化

Django还可以将日期格式化为本地化的日期字符串。为此,我们需要在模板中设置DATE_FORMAT和TIME_FORMAT设置。

# settings.py
USE_L10N = True
DATE_FORMAT = 'l, F d, Y'
TIME_FORMAT = 'P'

接下来,在模板中使用date和time过滤器即可。

{{ my_date|date }}
{{ my_time|time }}
时区格式化

如果你的应用程序需要支持多个时区,则需要使用时区格式化。为此,我们需要在settings.py中设置TIME_ZONE。Django使用 pytz 库来管理时区。

# settings.py
USE_TZ = True
TIME_ZONE = 'Asia/Shanghai'

在模板中,我们可以使用timezone过滤器来将日期格式化为所选时区的日期字符串。

{{ my_date|timezone:"America/New_York"|date:"l, F d Y" }}
自定义格式过滤器

Django还允许自定义过滤器。为了创建自定义过滤器,我们需要在应用程序中创建一个templatetags目录,并在其中创建一个py文件。然后,我们可以在该文件中定义自己的过滤器。

# my_app/templatetags/my_filters.py
from django import template
from datetime import datetime

register = template.Library()

@register.filter(name='my_date_format')
def my_date_format(value, arg):
    """
    根据给定日期格式化日期
    """
    try:
        return datetime.strftime(value, arg)
    except AttributeError:
        return ''

现在我们可以在模板中使用my_date_format过滤器。

{{ my_date|my_date_format:"%Y/%m/%d" }}

以上是Django模板中日期格式化的基础知识。随着Django的发展,这个功能变得越来越强大。对于更复杂的日期格式化问题,我们可以使用自定义模板标签来封装自己的功能。