КодексИспользование DateTime.Now() ввиду Джанго
Я использую DateTime.Now() как часть фильтра в представлении Django следующим образом:
def get_now():
return timezone.now()
class BulletinListView(ListView):
model = Announcement
template_name = 'newswire/home.html'
def get_context_data(self, **kwargs):
context = super(BulletinListView, self).get_context_data(**kwargs)
try:
published_announcements = Announcement.objects.filter(publish_start_date__lte=get_now(), publish_end_date__gte=get_now()).filter(hidden=False, under_review=False).extra(order_by=['-publish_start_date', 'publish_end_date'])
except Announcement.DoesNotExist:
published_announcements = None
if published_announcements is not None:
context['announcements'] = published_announcements
max_print_annoucements = int(config.MAX_PRINT_ANNOUCEMENTS)
context['announcements_print'] = published_announcements[
:max_print_annoucements]
context['more_annoucements_online_count'] = published_announcements.count() - max_print_annoucements
return context
Edit: Удалено, чтобы обновить и включить дополнительный код
Он работает правильно и получает объявления, которые должны быть опубликованы и не скрыты или не рассматриваются в соответствии с датой, предоставленной.
Проблема
Я использую datetime.datetime.now()
отфильтровать старые объявления, но я понял, после того, как один день в производственной среде, что datetime.datetime.now()
в настоящее время оценивается только тогда, когда сервер запускается и значение не обновляется каждый раз, когда в вид, который приводит к тому, что неправильные данные фильтруются, когда наступает следующий день. Это также влияет на другую функцию, которая восстанавливает предстоящие дни рождения в течение следующих 7 дней.
вещей Читаем и Пытался
Я видел ряд вопросов об использовании вызываемой datetime.now
вместо datetime.now()
, но только в контексте установки значений по умолчанию в модели.
Я определил функцию следующим образом, подумав, что она заставит datetime.now
снова оценить, но она не работает.
def get_now():
return timezone.now())
Когда я прохожу дату я получить контекст, чтобы увидеть, что я получаю, я вижу, что дата и время не продвигается мимо время я развертывания сервера.
Я видел несколько примеров использования datetime.now() в представлении, но никто не сталкивался с этой проблемой.
Я подозреваю, что я никогда не видел этого в разработке, потому что я запускаю сервер разработки для пушки с параметром --reload и datetime.now()
постоянно оценивается при сохранении изменений и перезагрузке сервера.
This problem, кажется, похожи, но я не уверен, как это похоже/отличается от моей ситуации
Контекст:
Я пишу приложение Django, и мои разработки и производственная среда реализуется с помощью докер и запустить приложение позади Nginx прокси
/usr/local/bin/gunicorn app.wsgi:application -w 2 -b :8000
«, но я понял, после того, как один день в производственной среде, datetime.datetime.now() в настоящее время оценивается только тогда, когда сервер запускается, и значение не обновляется каждый раз, когда вид называется «Не так». Вероятно, у вас есть испорченная настройка кэширования. – e4c5
В стороне, серверы, которые могут обрабатывать запросы по часовым поясам, скорее всего, будут использовать универсальное время через 'datetime.utcnow()'. – tdelaney
@ e4c5 Я дам стек снова для любого кэширования, но из моего файла настроек Django я не определил никакого кэширования. – purplecowww