时区它在本地工作但不在pythonanywhere(DJango)

时间:2018-03-24 13:16:23

标签: django django-views django-timezone

我有查询集列出今天的销售

from django.utils import timezone

class VentaToday(ListView):
    queryset = Venta.objects.filter(fecha=timezone.now()).order_by('-id')
    template_name = 'venta/venta_today.html'

在本地,这可以正常工作,但在生产(Pythonanywhere)中,前一天的销售不断出现。要修复它,我必须转到pythonanywhere面板并单击** reload **按钮来解决问题。

我改变了服务器时间:

Image of server time

django项目的配置:

LANGUAGE_CODE = 'es-pe'

TIME_ZONE = 'America/Lima'

USE_I18N = True

USE_L10N = True

USE_TZ = True

是服务器缓存问题吗?或者我做错了什么?

更新 配置WSGI:

# +++++++++++ DJANGO +++++++++++
# To use your own django app use code like this:
import os
import sys

os.environ["TZ"] = "America/Lima"
#
## assuming your django settings file is at '/home/dnicosventas/mysite/mysite/settings.py'
## and your manage.py is is at '/home/dnicosventas/mysite/manage.py'
path = '/home/dnicosventas/dnicos-ventas'
if path not in sys.path:
    sys.path.append(path)
#
os.environ['DJANGO_SETTINGS_MODULE'] = 'DnicosVentas.settings'
#
## then, for django >=1.5:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
## or, for older django <=1.4
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

和我的控制台:

export TZ="/usr/share/zoneinfo/America/Lima"

即便如此,在上午12点过后,昨天的销售仍然出现,直到我点击pythonanywhere面板中的重新加载按钮。

Views.py:

class VentaToday(ListView):
    today = datetime.now(pytz.timezone('America/Lima'))
    queryset = Venta.objects.filter(fecha=today).order_by('-id')
    template_name = 'venta/venta_today.html'

Image of the reload button

2 个答案:

答案 0 :(得分:1)

Giles Thomas的解决方案

i64

答案 1 :(得分:1)

TLDR :我遇到了同样的问题。我通过将pythonanywhere项目文件夹中settings.py文件中的TIME_ZONE=''更改为TIME_ZONE='UTC'来修复它。

默认情况下,Python使用pytz.timezone(settings.TIME_ZONE)来初始化Web应用程序的时区,并且由于默认情况下pythonanywhere不会初始化此变量,因此将其留给最终用户按照他们的要求进行操作。因此,根据您的需要启动TIME_ZONE可能会成功。

您还可以尝试在项目日志文件中查找有关此内容的更多信息。