首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django模板中转换API响应中的日期

如何在Django模板中转换API响应中的日期
EN

Stack Overflow用户
提问于 2019-09-02 15:39:09
回答 1查看 659关注 0票数 2

我有一个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>

试着:

代码语言:javascript
复制
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 ''
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-02 15:45:14

如果从外部API检索数据,则数据可能是字符串,而不是Python对象。

在这种情况下,您的选择可以是:

  • 自定义模板筛选器,它将字符串转换为日期,并将其格式化为具有所需格式的字符串。
  • 在视图中,将字符串转换为日期,并将其格式化为所需格式的字符串。

如果您想要一个自定义模板过滤器,我首先要从过滤器复制源代码,然后添加几行代码从字符串转换到datetime,然后用新的格式将这些datetime转换回字符串。

也许像这样,在一个名为your_app/templatetags/custom_tags.py的文件中

代码语言:javascript
复制
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 ''

然后像这样在模板中使用:

代码语言:javascript
复制
{% load custom_tags %}

<td class="text-center">
    {{ ticket.fields.updated|custom_date:"Y,D,M" }}
</td>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57759653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档