我正在尝试使用django + vobject发布ICS Feed。作为测试运行,我定义了以下视图:
def ical(request, user_id=None):
cal = vobject.iCalendar()
cal.add('method').value = 'PUBLISH'
cal.add('calscale').value = 'GREGORIAN'
cal.add('x-wr-calname').value = 'TestCal28'
cal.add('x-wr-timezone').value = 'Australia/Sydney'
cal.add('x-wr-caldesc').value = ''
vevent = cal.add('vevent')
vevent.add('dtstart').value = datetime.now()
vevent.add('dtend').value = datetime(2010, 7, 22)
vevent.add('dtstamp').value = datetime.now()
vevent.add('summary').value = "Test event"
icalstream = cal.serialize()
response = HttpResponse(icalstream, mimetype='text/calendar')
response['Filename'] = 'filename.ics'
response['Content-Disposition'] = 'attachment; filename=filename.ics'
所以,如果你想去rosters.davidmck.com/ical/,你应该得到 filename.ics ,mimetype = text / calendar。到目前为止一切都很好。
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
BEGIN:VEVENT
UID:20100720T073356Z-26389@Rafiki
DTSTART:20100720T173356
DTEND:20100722T000000
DTSTAMP:20100720T173356
SUMMARY:Test event
END:VEVENT
X-WR-CALDESC:
X-WR-CALNAME:TestCal28
X-WR-TIMEZONE:Australia/Sydney
END:VCALENDAR
这似乎是一个或多或少形成的ICS文件:它将导入到我尝试过的任何和所有日历应用程序,包括手动上传到谷歌日历。如果您使用Yahoo通过URL订阅它,它似乎也可以工作A-OK。但这是杀手锏:谷歌日历不会作为订阅工作。如果您尝试通过URL将其添加到goocal,它只会显示“从URL导入日历”一段时间,有时会生成失败消息(最终)。
更令人沮丧的是,如果我只是将 filename.ics 并将其置于某个静态文件服务位置(例如http://rosters.davidmck.com/site_media/filename.ics),它仍然不起作用
据我所知,位置(静态和生成)都是外部可用的。我也尝试过将ics上传到不同的Web服务器和实际上似乎正常工作的 所以我怀疑Goocal由于某种原因不喜欢我的网络服务器。它让我发疯,我想不出为什么。
答案 0 :(得分:4)
我怀疑这会解决您的问题(听起来像服务器配置问题),但我建议您查看django-cal以生成Feed。它的工作方式与django.contrib的联合供稿框架相同(阅读:很好)