You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何转换Python fetchall返回元组中的datetime格式用于网页展示?

解决Jinja2中datetime格式转换问题(DD/MM/YYYY hh:mm:ss)

有两种可靠的方法可以实现需求,同时避免前端DOM操作的id重复问题:

方法一:Python后端提前格式化

在将数据传给Jinja2模板之前,直接在Python代码中把datetime对象转换成目标格式的字符串:

# 从数据库获取原始数据
timelineList = cursor.fetchall()
# 生成格式化后的数据集
formatted_timeline = []
for item in timelineList:
    # 对每个元组中的datetime对象执行格式化
    formatted_dt = item[1].strftime("%d/%m/%Y %H:%M:%S")
    # 重组元组,替换原datetime对象为格式化后的字符串
    formatted_timeline.append( (item[0], formatted_dt, item[2]) )
# 将formatted_timeline传入模板,替代原timelineList

模板中无需修改日期渲染逻辑,直接使用{{ list.1 }}即可,此时输出的已经是目标格式的字符串。

方法二:Jinja2模板内直接格式化

利用Jinja2支持调用Python对象方法的特性,直接在模板中对datetime对象执行格式化:

修改模板中的日期渲染代码(同时移除重复的id="datetime"属性,DOM中id必须唯一):

{% for list in timelineList %}
<tr>
    <td class="datetime">
        {{ list.1.strftime("%d/%m/%Y %H:%M:%S") }}
    </td>
    <td>
    {% if list.2 != None %}
        {{ list.2 }}
    {% else %}
        Unknown User
    {% endif %}  
    </td>
</tr>
{% endfor %}

说明

  • 两种方法都规避了前端JS操作的问题:循环生成重复id会导致DOM选择器只能匹配第一个元素,而后端/模板层面的处理更高效,还能避免页面渲染时的日期格式闪烁。
  • strftime格式参数说明:%d为两位数日期,%m为两位数月份,%Y为四位数年份,%H为24小时制小时,%M为分钟,%S为秒。

内容的提问来源于stack exchange,提问作者NEET UI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:45:38