0

我刚刚使用了 Django 文档中显示的设置活动时区的示例:https ://docs.djangoproject.com/en/1.8/topics/i18n/timezones/#selecting-the-current-time-zone .

问题是那里显示的模板在“选择”框中没有任何内容。其他一切似乎都很好。

这是我的版本:

    {% load tz %}
    {% get_current_timezone as TIME_ZONE %}
    <form action="{% url '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>

这一切都很好,但选择框是空的 - 谁能解释一下?


回应评论的编辑

我的视图代码如下所示:

从 django.shortcuts 导入重定向,渲染

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

我可以确认 pytz 已安装。pip freeze包括:

pytz==2015.4

关于“我在哪里定义时区?” 这就是我的问题。我不明白为什么 doco 中的代码建议“时区”就在那里。我想知道这是否是副作用,{% load tz %}但除此之外……是的,这就是我的问题的核心。


回应评论的编辑

@Anentropic:当你说我错过了一个 endfor ......这不是我的代码,它不在 Django doco 中。也许它缺少一个 endfor 但如果它是我看不到 endfor 应该在哪里。

作为记录,这是我正在使用的实际模板代码(这是从该 Django 代码中剪切和粘贴的)

    <!-- The set TZ form -->
    {% load tz %}
    {% get_current_timezone as TIME_ZONE %}
    <form action="{% url '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>
4

0 回答 0