首页 > 解决方案 > Django 中的 datetime.date.today()(Dash 应用程序)

问题描述

django-plotly-dash我有一个使用该包在 Django 中运行的 Plotly Dash 应用程序。( https://django-plotly-dash.readthedocs.io/en/latest/ )

该应用程序在这里:https ://www.sunfire.xyz/data/tca

仪表板上有一个日期选择器,该元素的代码是这样的:

from datetime import date, datetime, timedelta
        html.Div([
            dcc.DatePickerRange(
                id='date-picker-range',
                min_date_allowed=date(2020, 10, 21),
                max_date_allowed=date.today(),
                initial_visible_month=date.today(),
                start_date=date.today() - timedelta(days=7),
                end_date=date.today(),
                display_format='DD/MM/YYYY',
            ),
        ], className="plotly-datepicker"),

max_date_allowed默认值end_date都应该是datetime.date.today()(在我输入这个时是 11 月 1 日),但是它似乎today()正在返回 django 应用程序启动的那一天。

事实上,现在它奇怪地设置max_date_allowed为 10 月 31 日,但是end_date是 10 月 30 日。如果我重新启动服务器,它会正常工作,并将显示 11 月 1 日。

date.today()当应用程序运行多天时,如何正确显示今天的日期?

仅供参考views.py,此应用程序的文件正在导入 Dash 应用程序from .dashapps import tca_log_plotter

标签: pythondjangodatetimeplotly-dashpython-datetime

解决方案


您遇到的问题是创建此 Plotly Dash 组件的代码仅在加载模块时执行一次(即“django 应用程序启动的那一天”)。您没有显示此实例化发生的位置,因此没有足够的信息来确定确切的原因。也许您已经将此组件定义分解为模块级变量以供重用?无论如何,解决方案是确保在每个请求上都调用日期选择器代码。

另外,使用 Django 的localdate()函数,而不是date.today(). 后者不考虑 Django 的设置(如TIME_ZONE)。


推荐阅读