2015-12-25 7 views
1

Я создал базовый календарь, который генерирует таблицу с текущим месяцем (взятым из URL) с помощью встроенной функции calendar.Calendar, но я хотел бы присоединять события к дням, которые сгенерированы. Какой был бы лучший способ сделать это?Django добавляет события в дни в календаре?

В настоящее время в моих взглядах:

def view_calendar(request, year=None, month=None): 
    events = Event.objects.filter(creator=request.user) 
    new_event_form = EventForm() 
    now = datetime.date.today() 
    if year: 
     year = int(year) 
    else: 
     year = now.year 
    if month: 
     month = int(month) 
    else: 
     month = now.month 

    cal = calendar.Calendar(calendar.SUNDAY) 
    month_days = cal.monthdatescalendar(year, month) 

    args = {'events': events, 'month': month, 'year': year, 'month_days': month_days} 
    args.update(csrf(request)) 
    args['new_event_form'] = new_event_form 
    return render(request, 'calendar.html', args) 

И в моем шаблоне я могу назвать недели и дни, как это:

<table cellpadding="3" width="100%"> 
    <tr> 
     <td>Sunday</td> 
     <td>Monday</td> 
     <td>Tuesday</td> 
     <td>Wednesday</td> 
     <td>Thursday</td> 
     <td>Friday</td> 
     <td>Saturday</td> 
    </tr> 
    {% for week in month_days %} 
     <tr> 
      {% for day in week %} 
       <td> 
        {{day|date:"j"}}<br /> 
       </td> 
      {% endfor %} 
     </tr> 
    {% endfor %} 
</table> 

То, что я хотел бы сделать, это что-то вроде этого в моей просмотров:

for week in month_days: 
     for day in week: 
      day['events'] = list(Event.objects.filter(creator=request.user, start_date=day)) 

Но я получаю эту ошибку: TypeError: 'datetime.date' объект г oes не поддерживает назначение позиции

Есть ли способ, с помощью которого я могу легко конвертировать эти дни в объекты, поддерживающие назначение объектов, чтобы я мог прикреплять события к дням и добавлять их в календарь?

Спасибо, у нас есть счастливое рождество, которое сегодня расчитывает.

ответ

0

Я получил это работает на основе от внушения delta32 в. Мне нужно было создать пустой словарь событий, а затем добавить каждую из недель в словарь событий после запуска моей петли. Это оставляет меня:

events = [] 
for week in month_days: 
    week_events = [(day, TSEvent.objects.filter(created_by=request.user, date_start=day)) for day in week] 
    events.append(week_events) 

Затем в календаре шаблона:

{% for week in events %} 
<tr> 
    {% for day, events in week %} 
     <td> 
      <a href="/ts/calendar/{{day|date:"Y"}}/{{day|date:"m"}}/{{day|date:"j"|leading_zeros:"2"}}/"> 
       {{day|date:"j"}} 
      </a> 
      <br /> 
      {% for event in events %} 
       <p><a href="/apps/timesweet/events/{{event.id}}/"><b>{{event.name}}</b></a></p> 
      {% endfor %} 
     </td> 
    {% endfor %} 
</tr> 
{% endfor %} 
0

Вы не можете использовать объект типа даты, например dict.

day['events'] = xxx 

Вместо этого вы могли бы сделать что-то вроде

events = [(day, Event.objects.filter(creator=request.user, start_date=day)) 
       for day in [week for week in month_days]] 

и использовать его в шаблоне

{% for week in events %} 
    <tr> 
     {% for day, events in week %} 
      <td> 
       {{day|date:"j"}}<br /> 
       {% for event in events %} 
        {{ event }}<br/> 
       {% endfor %} 

      </td> 
     {% endfor %} 
    </tr> 
    {% endfor %} 
+0

Я получаю «TypeError: ожидается строка или буфер» ошибку 500 от конкретной линии «за день в неделю [ за неделю в month_days] вы могли бы дать мне дополнительную информацию о том, что должна делать эта строка? –

+0

Я получил работу, основанную на ответе, предоставленном вами, добавив его в качестве следующего ответа ниже. пока я наконец добрался! –

Смежные вопросы