datetime.date.today() 在 Django 中(Dash 应用程序)

datetime.date.today() in Django (Dash app)

我在 Django 中有一个使用 django-plotly-dash 包的 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

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

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