如何转换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
相关产品推荐
相关产品推荐

