Datetime.date.today() всегда возвращает одно и то же значение
У меня есть проект Django. Я использую nginx + gunicorn. В файле views.py есть функция combined_data(), которая создает и возвращает HTML-страницу. Как вы можете видеть, я передаю объекты в 'rows' и текущую дату в 'time'.
Функция, возвращающая объекты, выглядит следующим образом
Проблема в том, что в этой функции reporting_date всегда получает значение, которое она получила при первом вызове. Например, я делаю "sudo systemctl restart gunicorn" и открываю эту страницу в браузере. reporting_date будет равна сегодняшнему дню. Если я открою страницу завтра, reporting_date не изменит своего значения.
Сначала я предположил, что datetime.date.today () работает неправильно, поэтому добавил параметр 'time' в views.py (первый экран), но там дата всегда правильная. Затем я подумал, что значение по умолчанию параметров функции get_combined() (второй экран) каким-то образом кэшируется, поэтому добавил параметр r_int, который получает случайное значение, но здесь все работает правильно. r_int всегда получает новое значение.
Теперь мне приходится вызывать "sudo systemctl restart gunicorn" каждый день, чтобы заставить страницу работать должным образом ((
Есть идеи, как решить эту проблему? Спасибо
Вместо
def get_combined(reported_date=datetime.datetime.today()):
использовать
def get_combined():
reported_date = datetime.datetime.today()
Что я пробовал:-
>>> def c(day = datetime.today()):
print(day)
>>> c()
>>> 2022-10-27 15:44:57.593444
>>> c()
>>> 2022-10-27 15:44:57.593444
>>> def c():
day = datetime.today()
print(day)
>>> c()
>>> 2022-10-27 15:56:02.459517
>>> c()
>>> 2022-10-27 15:56:04.630902
Как упомянул @OldBill: Когда вы объявляете значение по умолчанию для параметра функции, оно оценивается один раз, а не при каждом вызове функции
Значение по умолчанию для параметра reported_date
- это значение при первом импорте функции. Вы должны сделать что-то вроде
def get_combined(reported_date=None, ...):
reported_date = reported_date or datetime.datetime.today()
...