Flask/Dash后台服务日期选择器无法自动更新当日日期的解决咨询
解决Dash DatePickerSingle当日日期不可选的问题
问题原因
你当前代码里的datetime.date.today()是在服务启动瞬间计算的固定值,服务运行期间不会自动重新计算。这导致max_date_allowed一直停留在服务启动当天的日期,后续每日的当日日期都会超出这个固定值,因此呈现灰色不可选状态,只有重启服务才会重新计算一次当日日期。
解决方法
方法1:用定时回调动态更新日期属性
通过dcc.Interval组件定时触发回调,每天自动更新日期选择器的max_date_allowed、initial_visible_month和date属性,确保始终指向最新的当日日期:
from dash import Dash, dcc, html, Input, Output import datetime app = Dash(__name__) app.layout = html.Div([ dcc.DatePickerSingle( id='previ_date', min_date_allowed=datetime.date(2022, 5, 10), max_date_allowed=datetime.date.today(), initial_visible_month=datetime.date.today(), date=datetime.date.today() ), # 每天触发一次更新(86400000毫秒=24小时) dcc.Interval( id='daily-update-interval', interval=86400 * 1000, n_intervals=0 ) ]) @app.callback( [Output('previ_date', 'max_date_allowed'), Output('previ_date', 'initial_visible_month'), Output('previ_date', 'date')], Input('daily-update-interval', 'n_intervals') ) def refresh_datepicker(_): today = datetime.date.today() return today, today, today if __name__ == '__main__': app.run_server(debug=False)
方法2:通过动态布局函数刷新日期
如果不需要自动定时更新,仅需用户刷新页面时同步当日日期,可以将布局定义为函数,每次页面加载时重新计算当日日期:
from dash import Dash, dcc, html import datetime app = Dash(__name__) def generate_layout(): today = datetime.date.today() return html.Div([ dcc.DatePickerSingle( id='previ_date', min_date_allowed=datetime.date(2022, 5, 10), max_date_allowed=today, initial_visible_month=today, date=today ) ]) # 将布局设置为函数,每次页面刷新时执行 app.layout = generate_layout if __name__ == '__main__': app.run_server(debug=False)
内容的提问来源于stack exchange,提问作者Mohamed Ait Ahmed
相关产品推荐
相关产品推荐

