【问题标题】:datetime.date.today() in Django (Dash app)Django 中的 datetime.date.today()(Dash 应用程序)
【发布时间】:2021-02-14 06:35:43
【问题描述】:

我有一个使用 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

【问题讨论】:

  • 不确定这是否真的是这里的问题;但由于date.today() 返回本地日期,代码将根据运行代码的机器为您提供日期。
  • 服务器运行在UTC,settings.py django里面也设置了UTC,和我的当地时间是一样的。所以应该是UTC。

标签: python django datetime plotly-dash python-datetime


【解决方案1】:

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

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

【讨论】:

  • 啊,我确实认为这可能是问题所在,但我认为每次有人加载页面时都会调用 Dash 应用程序。不过我猜不是。
  • 找到了一些关于您的建议的文档,可以解决我的问题:dash.plotly.com/live-updates 谢谢!
猜你喜欢
  • 2018-07-29
  • 2018-02-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
相关资源
最近更新 更多