在django中创建下拉列表的月份列表

时间:2011-07-14 18:20:13

标签: django list select

在我的django应用程序中,我需要创建一个月份的下拉列表。视图需要一天的2位数值(即01,而不是第一天的1)。我必须将一天的列表传递给模板,可以创建选择元素的选项。

我按照下面的说明尝试了这个,并且正确创建了下拉列表。选择的日期,作为unicode返回(比如说'26'选择第26天)用于与datetime.datetime.today进行比较().day。一切正常..但是,我担心这是否是创建日期列表的正确方法..我的意思是,用另一个int列表扩展unicode字符串列表看起来不正确..但是,我想不出更好的解决方案。

请帮我提出建议。

感谢

标记。

在views.py中

...    
days=[u'01',u'02',u'03',u'04',u'05',u'06',u'07',u'08',u'09']

days.extend([x for x in range(10,32)])    
...

并在模板中

...
<form action=".">
...
  <select name="day" id="dayselect">
        {% for aday in days %}
           <option  value={{aday}} > {{aday}}</option>
        {% endfor %}
  </select>

  <input type="submit" value="entries of the day" />
</form>
...

urls.py有

url(r'^entries/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$','myapp.views.entries_for_day',
{
    'template_name':'myapp/entries_for_day.html',
    'page_title':'Entries of the day'

},name='entries_for_day'),

2 个答案:

答案 0 :(得分:2)

如果要创建带引号为零的字符串,则应使用字符串格式。 例如,您可以查看this答案。

对于你的例子,你可以使用这样的东西。

days = [u'%02d' % x for x in range(1,32)]

使用前导零创建列表。

虽然我对问题本身表示怀疑。你确定你应该能够选择少数几个月的31天吗? - 您只需将datetime对象发送到模板并输出该给定月份的天数。

但如果你坚持:

另一个选项可能是发送一个简单的范围列表(1,32),然后在模板中格式化它:

{% for day in days %}
    {{ day|stringformat:"02d" }}
{% endfor %}

另一个可能是让视图接受单个数字输入。

答案 1 :(得分:0)

字符串插值。

days = [u'%02d' % x for x in range(1, 32)]