📅  最后修改于: 2023-12-03 15:14:44.298000             🧑  作者: Mango
在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的发展,这个功能变得越来越强大。对于更复杂的日期格式化问题,我们可以使用自定义模板标签来封装自己的功能。