python-3.x - 如何从 Django 模板中的 API 响应转换日期
问题描述
我有一个 API 在我的一个模板中填充一些数据。日期的输出是"2019-08-30T08:22:32.245-0700"
如何让日期看起来像DD/MM/YY
我尝试了一些模板date:
类型的东西,类似于你对 Jekyll 所做的,但没有任何效果
这就是我从 API 响应中显示它的方式。
<td class="text-center">{{ ticket.fields.updated }}</td>
我试过类似的东西:
<td class="text-center">{{ ticket.fields.updated | date: "Y,D,M " }}</td>
试:
class PostDetailView(DetailView):
'''
This view will hold infomation from Pendo / Salesforce and Jira
using their APIs to display the infomation.
'''
model = Post
template_name = 'clients/post_detail.html'
def render_to_response(self, context, **response_kwargs):
# pendo api
pendo_result = api_calls.pendo_data()
context['pendo_data'] = pendo_result
# jira api
jira_result = api_calls.jira_data()
context['jira_data'] = jira_result['issues']
return super().render_to_response(context, **response_kwargs)
@register.filter(expects_localtime=True, is_safe=False)
def date(value, arg=None):
jira_api = api_calls.jira_data()
jira_date = jira_api['fields']['updated']
if value in (None, ''):
return ''
if isinstance(value, str):
api_date_format = jira_date
value = datetime.datetime.strptime(value, api_date_format)
try:
return formats.date_format(value, arg)
except AttributeError:
try:
return format(value, arg)
except AttributeError:
return ''
解决方案
如果从外部 API 检索,您的数据可能是字符串而不是 Pythondatetime.date
对象。
在这种情况下,您的选择可能是:
- 将字符串转换为日期并将其格式化为所需格式的字符串的自定义模板过滤器
- 在您的视图中将字符串转换为日期并将它们格式化为具有所需格式的字符串
如果您想要自定义模板过滤器,我会首先从内置date
过滤器中复制源代码并添加几行以从字符串转换为日期时间,然后将这些日期时间转换回具有新格式的字符串。
也许像这样,在一个名为your_app/templatetags/custom_tags.py的文件中:
from django import template
from django.utils import formats
register = template.Library()
@register.filter(expects_localtime=True, is_safe=False)
def custom_date(value, arg=None):
if value in (None, ''):
return ''
if isinstance(value, str):
api_date_format = '%Y-%m-%dT%H:%M:%S'
value = datetime.datetime.strptime(value, api_date_format)
try:
return formats.date_format(value, arg)
except AttributeError:
try:
return format(value, arg)
except AttributeError:
return ''
然后像这样在您的模板中使用:
{% load custom_tags %}
<td class="text-center">
{{ ticket.fields.updated|custom_date:"Y,D,M" }}
</td>
推荐阅读
- node.js - node.js中的Python多处理-子进程打印不起作用
- javascript - 具有多个元素的 html2Canvas 查询
- java - 如何在构造函数中模拟实例?
- python - 如何将 a2c3d 转换为 accfd?
- java - 完成点击次数共享首选项的语法
- android - 从另一个 Fragment 中查找 Tab 位置
- c - C中的串行读取不返回数据
- php - 在 IIS 上运行的 PHP - 15 分钟后超时
- php - Chrome:当作为本地文件查看时,PHP 文件中的 HTML 内容不显示
- r - R:遍历数据框,提取多个变量的子集,然后存储在聚合数据集中