Django 将事件附加到日历中的日期?
Django attaching events to days in a calendar?
我已经构建了一个基本日历,它使用内置的 calendar.Calendar 函数生成当前月份的 table(取自 URL),但我想将事件附加到生成的日期。最好的方法是什么?
目前我认为:
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))
但是我得到这个错误:
类型错误:'datetime.date' 对象不支持项目分配
有没有一种方法可以轻松地将这些日子转换为支持项目分配的对象,以便我可以将事件附加到这些日子并将它们添加到日历中?
谢谢今天正在计算的任何人,祝大家圣诞节快乐。
你不能使用像字典这样的日期类型对象。
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 %}
我根据 delta32 的建议让它工作了。我需要创建一个空的 Events 字典,然后通过我的 foor 循环在 运行 之后将每个星期附加到 events 字典。这给我留下了:
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 %}
我已经构建了一个基本日历,它使用内置的 calendar.Calendar 函数生成当前月份的 table(取自 URL),但我想将事件附加到生成的日期。最好的方法是什么?
目前我认为:
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))
但是我得到这个错误: 类型错误:'datetime.date' 对象不支持项目分配
有没有一种方法可以轻松地将这些日子转换为支持项目分配的对象,以便我可以将事件附加到这些日子并将它们添加到日历中?
谢谢今天正在计算的任何人,祝大家圣诞节快乐。
你不能使用像字典这样的日期类型对象。
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 %}
我根据 delta32 的建议让它工作了。我需要创建一个空的 Events 字典,然后通过我的 foor 循环在 运行 之后将每个星期附加到 events 字典。这给我留下了:
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 %}