我想在django模板中创建一年下拉列表。下拉列表将包含2011年的开始年份,而结束年度应为当年的5年。
例如:如果今天我看到它将会显示2011年,2012年,2013年,2017年的年份。
可以通过从views.py发送列表并在模板中循环或在forms.py中定义来完成。
但我不想在这里使用任何形式。我只需要在模板中显示它。
我如何在Django模板中执行此操作。
答案 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根据当前年份填充下拉列表。