【问题标题】:Issues with Django and pytzDjango 和 pytz 的问题
【发布时间】:2012-08-30 14:19:50
【问题描述】:

我按照 Django 网站上的时区文档进行操作,但没有成功。我的问题是我的模板上有一个选择框,应该填充 pytz 提供的常用时区,但是,无论出于何种原因,它都是空的。

我的最终目标是允许用户选择自己的时区。

任何帮助表示赞赏,在此先感谢。

view.py:

def set_timezone(request):
    if request.method == 'POST':
        request.session['django_timezone'] = pytz.timezone(request.POST['timezone'])
        return redirect('/')
    else:
        return render(request, 'n2w/leads.html', {'timezones': pytz.common_timezones})

leads.html:

            {% load tz %}
            {{ datetime }}
            <form action="" 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>

settings.py:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.timezone.TimeZoneMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
        )

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    #'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'registration',
    'django.contrib.humanize',
    'n2w',
    'n2api',
    'dajaxice',
    'pytz',
)

中间件类(timezone.py):

from django.utils import timezone

class TimeZoneMiddleware(object):
    def process_request(self, request):
        tz = request.session.get('django_timezone')
        if tz:
            timezone.activate(tz)

【问题讨论】:

    标签: django timezone pytz


    【解决方案1】:

    我认为您可能会引发 NameError 或其他问题。尝试导入 pytz:

    从 pytz 导入 common_timezones

    ...

    ...

    return render(request, 'n2w/leads.html', {'timezones': common_timezones})

    【讨论】:

    • 您需要对该伙伴提供更多调试,实际发送列表的服务器端更改肯定不是您的浏览器崩溃的真正原因。
    • 例如在 python 终端中试试这个,这样你就可以看到输出:>>> pytz.common_timezones Traceback(最近一次调用最后一次):文件“”,第 1 行,在 NameError: name 'pytz' is not defined now try: >>> from pytz import common_timezones >>> common_timezones 在这里你会看到终端打印出常用时区列表。如果此更改导致浏览器崩溃,那么您在代码的其他地方有 error 。一个潜在的问题区域是 request.POST['var'] 尝试使用 request.POST.get('var') 更多调试输出将帮助我进一步帮助您
    • 是的!很酷,所以现在我们知道您的系统由于某种原因无法导入 pytz。你运行的是什么版本的python?
    【解决方案2】:

    从 2.7.1 -> 2.7.3 升级我的 Python 安装后,我能够完美地导入 pytz。感谢您的所有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 2013-12-20
      • 2014-01-17
      • 2016-06-08
      • 2021-09-19
      • 2019-04-06
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多