当我们在django视图中传递date
对象并在html中渲染时,它以以下格式输出。
'Oct. 7, 2022', 'Sept. 9, 2022', 'Aug. 12, 2022', 'July 15, 2022', 'June 17, 2022', 'May 20, 2022', 'April 22, 2022', 'March 25, 2022', 'Feb. 25, 2022', 'Jan. 28, 2022', 'Dec. 31, 2021', 'Feb. 11, 2022', 'Nov. 5, 2021'
这是每个月的情况示例。我想把它转换成YYYY-MM-DD
格式。
我使用以下方法,这是工作版本,但我正在寻找优化的代码。
import re
import datetime
date_value = 'Sept. 9, 2022'
date_value = re.split("[., ]", date_value)
date_value[0] = date_value[0][:3]
date_value = ' '.join(date_value)
date_value = datetime.datetime.strptime(date_value, '%b %d %Y').strftime('%Y-%m-%d')
print(date_value)
>> 2022-09-09
有没有其他方法可以直接将其转换为这种格式?
这个问题不是关于在UI上像date_value |date:"Y-M-d"
那样格式化django日期。相反,我希望在python后端做这件事。
我不知道你的settings.py文件是什么样子的,但试着将设置参数设置为
#settings.py
...
TIME_ZONE = 'UTC'
USE_TZ = True
我有一个带有这些设置的项目,它在HTML模板中显示日期,没有进一步的格式设置(见图(。
图像
如果只想对视图中的一些日期值执行此操作,可以从datetime python模块调用"isoformat(("函数。在下面的代码中,看看如何将它用于DateField。
型号.py
class Article(models.Model):
title = models.CharField(max_length=50)
delivery_date = models.DateField()
...
视图.py
def get_article_date(request):
article = Article.objects.get(id=1)
formatted_date = article.delivery_date.isoformat()
return render(request, 'template.html', {'date': formatted_date})
如果您使用的是QuerySets,而不仅仅是呈现日期,那么您可以编写一个自定义模板过滤器,用于格式化模板中的日期(请参阅下面的代码(。
视图.py
def get_article_date(request):
articles = Article.objects.all()
return render(request, 'template.html', {'articles': articles})
template.html
{% load custom_filters %}
{% for article in articles %}
<p>{{ article.name }}, delivered on {{ article.delivery_date|format_date }}</p>
{% endfor %}
custom_filters.py
from django import template
register = template.Library()
@register.filter
def format_date(value):
return value.isoformat()