在Django模板中创建年份下拉列表

时间:2013-01-04 06:41:49

标签: python django django-templates

我想在django模板中创建一年下拉列表。下拉列表将包含2011年的开始年份,而结束年度应为当年的5年。

例如:如果今天我看到它将会显示2011年,2012年,2013年,2017年的年份。

可以通过从views.py发送列表并在模板中循环或在forms.py中定义来完成。

但我不想在这里使用任何形式。我只需要在模板中显示它。

我如何在Django模板中执行此操作。

5 个答案:

答案 0 :(得分:6)

models.py ...

import datetime

year_dropdown = []
for y in range(2011, (datetime.datetime.now().year + 5)):
    year_dropdown.append((y, y))

因此,您的字段现在可以使用year_dropdown

year = models.IntegerField(_('year'), max_length=4, choices=year_dropdown, default=datetime.datetime.now().year)

将当前年份设为默认值。

如果您想要的只是模板中的值,那么请执行以下操作...

<select id="year">
{% for y in range(2011, (datetime.datetime.now().year + 5)) %}
    <option value="{{ y }}">{{ y }}</option>
{% endfor %}
</select>

有关详细信息,请阅读Django template language documentation

答案 1 :(得分:1)

如果你想要的只是一个简单的岁月,你可以做@Nick或@Ian所建议的。如果您想要一些日历类型功能(日期选择器),您可以查看JQuery UI DatePicker

答案 2 :(得分:0)

<select name="select_year">
<option>2011</option>
<option>2012</option>
<option>2013</option>
<option>2014</option>
<option>2015</option>
<option>2016</option>
<option>2017</option>
</select>

将其放入您的模板文件中...如果您想要动态范围的年份,则需要制作自己的模板标记

此线程有几个答案可以将范围类型功能实现为模板标记

Numeric for loop in Django templates

使用javascript解决方案可能是动态设置范围的最简单方法。

答案 3 :(得分:0)

这就是我喜欢的方式。

models.py:

YEAR_CHOICES = []
for r in range(2011, (datetime.datetime.now().year+5)):
    YEAR_CHOICES.append((r,r))

year = models.IntegerField(('year'), max_length=4, choices=YEAR_CHOICES, default=datetime.datetime.now().year)

答案 4 :(得分:0)

我建议在客户端使用Javascript或jQuery根据当前年份填充下拉列表。