2013-01-04 48 views
2

我想在django模板中创建年份下拉列表。该下拉菜单将包含2011年的开始年份,结束年份应该是今年的5年。在Django模板中创建年份下拉列表

例如:如果今天我看到dropdwon,它会显示我2011年,2012年,2013年,... 2017年不等。

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

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

我该如何在Django模板中做到这一点。

回答

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

+0

该问题提到,他不想使用窗体。 – Babu

+0

他想直接在模板文件中做... –

+0

嘿伊恩我不想在这里使用任何类型的视图,模型或表单,因为数据不会被保存在任何地方。我只想显示dropdwon,并在选择年份时从db中提取当年的数据。那么我们可以从客户端自己做到这一点。 – sandeep

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> 

把在你的模板文件...如果你想要做的年动态范围,你需要使自己的模板标签

这个线程执行范围类型的功能几个答案使用JavaScript解决方案模板标签

Numeric for loop in Django templates

很可能是动态设置范围的最简单方法。

+0

不,我不能做到这一点,因为当2014年到来时,我必须展示2011年,2012,2013,2014 ... 2018年。你可以建议如何通过编写模板标签来完成它。谢谢 – sandeep

+0

编辑链接到一个线程,讨论深入 –

1

如果你想要的只是一个简单的下拉年份本身,你可以做@Nick或@Ian建议。如果你想要一些日历型功能(日期选择器),你可以看看JQuery UI DatePicker

+1

这可能是一个比我更好的解决方案tbh –

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) 
+0

看到关于Ians答案的评论...我不认为这是他想要的...... –

+0

我不想在这里使用任何服务器端代码,我们可以在模板本身。 – sandeep

+0

如果你不想要任何服务器端代码在这里,然后这个问题是不是真的关于使用django。你可以很容易地创建一个选择框只使用HTML或jQuery的某人建议。但林不知道用户输入数据的目的我f它不会被保存到数据库中。 –

0

我会建议使用JavaScript或jQuery的在客户端根据当年来填充下拉列表。