我通过django_ical服务器作为icalender文件。问题是该文件名为download.ics。我正在尝试将其更改为MyCalender.ics。如果发现这个旧片段。我更喜欢使用django_ical,因为它与django联合很好地融合。
cal = vobject.iCalendar()
cal.add('method').value = 'PUBLISH' # IE/Outlook needs this
for event in event_list:
vevent = cal.add('vevent')
icalstream = cal.serialize()
response = HttpResponse(icalstream, mimetype='text/calendar')
response['Filename'] = 'filename.ics' # IE needs this
response['Content-Disposition'] = 'attachment; filename=filename.ics'
答案 0 :(得分:3)
在django_ical
中,ICalFeed
继承自django.contrib.syndication.views.Feed
在您的应用中,您继承自ICalFeed
,以提供items
,item_title
以及为ics文件生成数据的其他方法。
您可以覆盖__call__
方法。致super
的电话会向您发送HttpResponse
,您将为其添加自定义标题。
代码如下:
class EventFeed(ICalFeed):
"""
A simple event calender
"""
product_id = '-//example.com//Example//EN'
timezone = 'UTC'
def items(self):
return Event.objects.all().order_by('-start_datetime')
# your other fields
def __call__(self, request, *args, **kwargs):
response = super(EventFeed, self).__call__(request, *args, **kwargs)
if response.mimetype == 'text/calendar':
response['Filename'] = 'filename.ics' # IE needs this
response['Content-Disposition'] = 'attachment; filename=filename.ics'
return response
此代码未经过测试,因此可能存在一些拼写错误。如果在调用super
时出现错误,您还需要捕获。我是通过response.mimetype == 'text/calendar'
来做的,但也许有更好的方法来做到这一点