编程语言
首页 > 编程语言> > python-在Django中发布ics feed

python-在Django中发布ics feed

作者:互联网

我正在尝试使用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文件:它将导入到我尝试过的所有日历应用程序中,包括手动上传到Google日历.如果您使用Yahoo通过URL订阅它,似乎也可以.但这是杀手kill:Google日历无法用作订阅.如果您尝试通过URL将其添加到goocal中,那么它只会说“从URL导入日历”永恒,有时会生成一条失败消息(最终).

更令人沮丧的是,如果我只使用filename.ics文件并将其放在某个静态文件服务位置(如http://rosters.davidmck.com/site_media/filename.ics),它仍然无法正常工作.

据我所知,这两个位置(静态的和生成的)都可以从外部获得.我还尝试将ics上传到其他Web服务器,但实际上似乎可以正常工作,因此我怀疑Goocal由于某些原因不喜欢我的Web服务器.这让我发疯,我不知道为什么.

解决方法:

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

标签:apache,icalendar,python,django
来源: https://codeday.me/bug/20191106/1998870.html