Datetime Django 1.5-Python2.7-TIME_ZONE在登录时未正确设置(从自定义用户字段),直到重新加载第一页

Datetime Django 1.5-Python2.7-TIME_ZONE在登录时未正确设置(从自定义用户字段),直到重新加载第一页,datetime,python-2.7,timezone,django-1.5,pytz,Datetime,Python 2.7,Timezone,Django 1.5,Pytz,我的问题是,我已经在Django中设置了自定义用户时区设置,并且它只在重新加载第一页后正确设置时区值。当前,如果用户登录,他会看到默认时区设置(“美国/纽约”),然后在第一次刷新时会看到自己的时区设置正确(即-“美国/温哥华”) 这是我的中间件 from django.utils import timezone class TimezoneMiddleware(object): def process_request(self, request): tz = reque

我的问题是,我已经在Django中设置了自定义用户时区设置,并且它只在重新加载第一页后正确设置时区值。当前,如果用户登录,他会看到默认时区设置(“美国/纽约”),然后在第一次刷新时会看到自己的时区设置正确(即-“美国/温哥华”)

这是我的中间件

from django.utils import timezone

class TimezoneMiddleware(object):
    def process_request(self, request):
        tz = request.session.get('django_timezone')
        if tz:
            timezone.activate(tz)
这是我的登录视图,它使用pytz计算从数据库中的用户获取的字符串时区,并将其放入会话中。初次登录后,时区不会被时区反映出来。如果我的模板中有{TIME_ZONE}},它将显示为默认设置“America/New_York”。单页刷新后,它显示为用户设置的“America/Vancouver”

def login_view(request):
    if request.method == 'POST':
        user = authenticate(username=request.POST['username'], password=request.POST['password'])

        if user is not None:

            if user.is_active:
                login(request, user)
                request.session['user'] = user
                userdetails = user.get_profile()
                request.session['django_timezone'] = pytz.timezone(userdetails.timezone)
                # Prioritize favorite company in index list of companies
                return companyHome(request, userdetails.get_favorite_company_id())
这是我在时区提交模板中的表单,它按预期工作并在使用时设置时区

  <form action="{% url 'onBaristaApp:set_timezone' %}" method="POST">
      {% csrf_token %}
      <label for="timezone">Time zone:</label>
      <select name="timezone">
          {% for tz in timezones %}
          <option value="{{ tz }}"{% if tz == TIME_ZONE %} selected="selected"{% endif %}>{{ tz }}</option>
          {% endfor %}
      </select>
      <input type="submit" value="Set" />
  </form>
以下是自定义用户配置文件上的相关模型字段

class UserProfile(models.Model):
    ...
    timezone = models.CharField(max_length=50, default='America/New_York')
    ...
这是发生问题的模板

{% extends "base.html" %}
{% load url from future %}
{% load tz %}
{% get_current_timezone as TIME_ZONE %}

{% block body_tag %} home {% endblock %}

{% block contents %}

...
          {% for check_in_object in location.get_checkins %}
              {% localtime on %}
              ...
                      {{ check_in_object }}{{ check_in_object.get_tzobject }}
              ...

              {% endlocaltime %}
          ...
{% endblock %}
下面是get_tzobject方法的代码,该方法显示时间以及模型和字段

class checkIn(models.Model):
    ...
    inTime = models.DateTimeField(null=True)
    outTime = models.DateTimeField(null=True)
    checkedin = models.BooleanField(default=True)
    ...

    def get_tzobject(self):
        if self.checkedin:
            timezone_corrected_time = localtime(self.inTime)
        else:
            timezone_corrected_time = localtime(self.outTime)

        activate(timezone_corrected_time.tzinfo)
        return timezone_corrected_time

我可以通过在我的登录视图代码中添加timezone.activate(pytz.timezone(userdetails.timezone))来解决这个问题

def login_view(request):
    if request.method == 'POST':
        user = authenticate(username=request.POST['username'],     password=request.POST['password'])

        if user is not None:

            if user.is_active:
                login(request, user)
                request.session['user'] = user
                userdetails = user.get_profile()
                timezone.activate(pytz.timezone(userdetails.timezone))
                request.session['django_timezone'] = pytz.timezone(userdetails.timezone)
                # Prioritize favorite company in index list of companies
                return companyHome(request, userdetails.get_favorite_company_id())
def login_view(request):
    if request.method == 'POST':
        user = authenticate(username=request.POST['username'],     password=request.POST['password'])

        if user is not None:

            if user.is_active:
                login(request, user)
                request.session['user'] = user
                userdetails = user.get_profile()
                timezone.activate(pytz.timezone(userdetails.timezone))
                request.session['django_timezone'] = pytz.timezone(userdetails.timezone)
                # Prioritize favorite company in index list of companies
                return companyHome(request, userdetails.get_favorite_company_id())