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
)。
我在 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
)。