2010-07-20 107 views
3

我试图用django + vobject发布一个ICS饲料。作为试运行,我已经定义了以下观点:如果你愿意去rosters.davidmck.com/ical/你应该得到服务的filename.ics,MIME类型=文本/日历在Django中发布ics饲料

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' 

左右。到现在为止还挺好。

BEGIN:VCALENDAR 
VERSION:2.0 
CALSCALE:GREGORIAN 
METHOD:PUBLISH 
PRODID:-//PYVOBJECT//NONSGML Version 1//EN 
BEGIN:VEVENT 
UID:[email protected] 
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文件:它会导入到任何和所有我试过,包括手动上传到谷歌日历日历应用。如果你使用雅虎通过URL订阅它,它似乎也可以工作。但是这里是杀手:Google日历不能用作订阅。如果您尝试通过URL将其添加到goocal,它只是说永久性地从URL导入日历,有时会生成失败消息(最终)。

更令人沮丧的,如果我只是采取filename.ics,并把它放在一些静态文件服务的位置(如http://rosters.davidmck.com/site_media/filename.ics),但它仍然不起作用

据我所知,位置(静态和生成)都是外部可用的。我也尝试了将ics上传到不同的web服务器,并且实际上似乎工作,所以我怀疑Goocal不喜欢我的web服务器出于某种原因。这让我疯狂,我想不出为什么。

回答

4

我怀疑这会解决你的问题(听起来像是一个服务器配置问题),但我建议检查django-cal您的饲料生成。它的工作方式与django.contrib的联合供稿框架相同(阅读:很好)