如何通过FastAPI将Python的time函数传入Jinja2模板计算渲染耗时?
Jinja2模板计算渲染耗时的解决办法
方案一:后端计算好耗时再传入模板
最直接省心的方式,在返回模板响应前算出耗时,把结果传入模板:
process_time = time.time() - t0 return templates.TemplateResponse("jobs.html", { "request": request, "jobs": sorted(out, key=lambda d: d['id'], reverse=True), "project_ids": ','.join([str(id) for id in myids]), "sorted_collumn": 'id', "filter": filter, "alljobs": alljobs, "nrecent": nrecent, "t0": t0, "process_time": round(process_time, 2) })
模板里直接调用变量:
耗时:{{ process_time }} 秒
方案二:在模板中导入time模块
Jinja2不允许在{{ }}表达式里直接写import,需要用专门的标签导入模块,建议给模块起别名避免变量冲突:
先在模板合适位置(比如开头)导入:
{% import time as time_mod %}
然后计算并格式化耗时:
耗时:{{ (time_mod.time() - t0)|round(2) }} 秒
之前写法报错的原因
- 写法一:Jinja2的表达式语法不支持在
{{ }}内嵌入import语句,必须用{% import %}标签来处理模块导入。 - 写法二:模板中未导入
time模块,系统找不到对应的模块对象,误将某个float类型变量(比如你传入的t0)当成time来调用.time()方法,因此报错“float对象没有time属性”。
内容的提问来源于stack exchange,提问作者MortenB
相关产品推荐
相关产品推荐

