1

私はdjango_icalを介してicalenderファイルをサーバーにしています。問題は、ファイルの名前が download.ics であることです。これを MyCalender.ics に変更しようとしています。この古いスニペットが見つかった場合。django シンジケーションとうまく統合されるため、django_ical を使用することをお勧めします。

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'
4

1 に答える 1

3

django_icalから継承ICalFeedされますdjango.contrib.syndication.views.Feed

アプリでは、提供するために継承し、ics ファイルのデータを生成するその他のメソッドICalFeedを提供します。itemsitem_title

メソッドをオーバーライドできます__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'が、もっと良い方法があるかもしれません

于 2012-11-01T16:33:28.130 に答える