我想在django模板中创建年份下拉列表。该下拉菜单将包含2011年的开始年份,结束年份应该是今年的5年。在Django模板中创建年份下拉列表
例如:如果今天我看到dropdwon,它会显示我2011年,2012年,2013年,... 2017年不等。
它可以通过从views.py发送一个列表并在模板中循环或在forms.py中定义来完成。
但我不想在这里使用任何形式。我只需要在模板中显示它。
我该如何在Django模板中做到这一点。
我想在django模板中创建年份下拉列表。该下拉菜单将包含2011年的开始年份,结束年份应该是今年的5年。在Django模板中创建年份下拉列表
例如:如果今天我看到dropdwon,它会显示我2011年,2012年,2013年,... 2017年不等。
它可以通过从views.py发送一个列表并在模板中循环或在forms.py中定义来完成。
但我不想在这里使用任何形式。我只需要在模板中显示它。
我该如何在Django模板中做到这一点。
在你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。
<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
很可能是动态设置范围的最简单方法。
不,我不能做到这一点,因为当2014年到来时,我必须展示2011年,2012,2013,2014 ... 2018年。你可以建议如何通过编写模板标签来完成它。谢谢 – sandeep
编辑链接到一个线程,讨论深入 –
如果你想要的只是一个简单的下拉年份本身,你可以做@Nick或@Ian建议。如果你想要一些日历型功能(日期选择器),你可以看看JQuery UI DatePicker
这可能是一个比我更好的解决方案tbh –
这就是我喜欢这样做的方式。
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)
看到关于Ians答案的评论...我不认为这是他想要的...... –
我不想在这里使用任何服务器端代码,我们可以在模板本身。 – sandeep
如果你不想要任何服务器端代码在这里,然后这个问题是不是真的关于使用django。你可以很容易地创建一个选择框只使用HTML或jQuery的某人建议。但林不知道用户输入数据的目的我f它不会被保存到数据库中。 –
我会建议使用JavaScript或jQuery的在客户端根据当年来填充下拉列表。
该问题提到,他不想使用窗体。 – Babu
他想直接在模板文件中做... –
嘿伊恩我不想在这里使用任何类型的视图,模型或表单,因为数据不会被保存在任何地方。我只想显示dropdwon,并在选择年份时从db中提取当年的数据。那么我们可以从客户端自己做到这一点。 – sandeep