我刚刚使用了 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>