2

我想在 django 模板中创建一个年份下拉列表。下拉列表将包含作为 2011 年的开始年份,结束年份应该是从当前年份算起的 5 年。

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

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

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

我怎样才能在 Django 模板中做到这一点。

4

5 回答 5

8

在你的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 模板语言文档

于 2013-01-04T07:01:58.847 回答
1

如果您想要的只是年份本身的下拉列表,您可以按照@Nick 或@Ian 的建议进行操作。如果您想要一些日历类型功能(日期选择器),您可以查看JQuery UI DatePicker

于 2013-01-04T07:01:30.500 回答
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>

把它放在你的模板文件中......如果你想做一个动态的年份范围,你需要制作自己的模板标签

这个线程有几个实现范围类型功能作为模板标签的答案

Django模板中的数字for循环

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

于 2013-01-04T06:55:54.757 回答
0

这就是我喜欢这样做的方式。

模型.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)
于 2013-01-04T07:03:17.833 回答
0

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

于 2013-01-04T07:09:22.110 回答