создание списка дней месяца для выпадающего списка в Django - PullRequest
0 голосов
/ 14 июля 2011

В моем приложении django мне нужно создать выпадающий список для дней месяца. Представление ожидает двухзначное значение для дня (то есть 01, а не 1 для первого дня). Мне нужно передать список дней в шаблон, чтобы можно было создать параметры выбранного элемента.

Я попытался сделать это, как указано ниже, и выпадающий список создан правильно. Выбранный день, возвращенный как Unicode (скажем, u'26 'для выбора 26-го дня), используется для сравнения с datetime.datetime.today () .day. Все работает .. Тем не менее, я волнуюсь, если это правильный способ создания списка дней .. Я имею в виду, расширение списка строк 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 ]

2 голосов
/ 14 июля 2011

Если вы хотите создать строки с нулями ведущих, вам следует использовать форматирование строк.Например, вы можете посмотреть на этот ответ, сделав именно это.

Для вашего примера вы можете использовать что-то вроде этого.

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

, который создает список с ведущими нулями.

Хотя я сомневаюсь в самой проблеме.Вы уверены, что сможете выбрать все 31 день месяца, где их меньше?- вы можете просто отправить объект datetime в шаблон и вывести дни для данного месяца.

Но если вы настаиваете:

Другой вариант - отправить простой список диапазона (1, 32) и затем отформатировать его в шаблоне:

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

Другой способ, возможно, сделать так, чтобы представление также принимало однозначный ввод.

0 голосов
/ 14 июля 2011

Строковая интерполяция.

days = [u'%02d' % x for x in range(1, 32)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...