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

如何在Flask的base.html中直接执行datetime日期格式化函数?

解决方案

完全可以直接在base.html中生成日期,不用在每个路由里重复传参,这里提供两种实用方法:

方法一:全局模板上下文处理器

在routes.py里添加一个上下文处理器,把格式化好的日期注入到所有模板中:

from datetime import datetime

@app.context_processor
def inject_current_date():
    return {'current_date': datetime.today().strftime('%Y-%m-%d %H:%M')}

然后修改base.html的date块,直接调用这个全局变量:

{% block date %}
   {{ current_date }}
{% endblock %}

这样所有继承base.html的子模板(比如start.html)都不用再单独传date参数,子模板甚至可以不用覆盖date块,直接继承base里的日期渲染逻辑。

方法二:将datetime模块注册到模板全局

如果你想直接在模板里写datetime.today().strftime(...),先在routes.py里把datetime模块注册到Jinja2的全局变量中:

from datetime import datetime

app.jinja_env.globals['datetime'] = datetime

然后修改base.html的date块:

{% block date %}
   {{ datetime.today().strftime('%Y-%m-%d %H:%M') }}
{% endblock %}

这种方式同样不需要在路由里传参,所有子模板都会自动渲染这个日期。

进阶优化:自定义日期过滤器

如果需要多种日期格式,可以自定义一个模板过滤器,灵活性更高:

@app.template_filter('format_date')
def format_date(date, fmt='%Y-%m-%d %H:%M'):
    return date.strftime(fmt)

使用时可以直接调用默认格式:

{% block date %}
   {{ datetime.today()|format_date }}
{% endblock %}

也可以指定自定义格式:

{{ datetime.today()|format_date('%Y年%m月%d日 %H:%M') }}

推荐第一种上下文处理器的方式,逻辑更清晰,后续修改格式也只需要改一处代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:10:48