Insights

Cómo exportar los datos a iCal en Django

Photo of the author: Vera Mazhuga

Vera Mazhuga

  •  

1 min read.


En esta entrada vamos a mirar cómo crear un archivo .ics en Django.


Supongamos que tenemos un modelo de Django que representa actividades:

class Activity(models.Model):
        name = models.CharField(
            max_length=255,
        )
        date = models.DateTimeField()    
        duration = models.IntegerField()    
        name = models.CharField( 
            max_length=255,
        )


Vamos a escribir una vista que nos permita exportar las actividades en el formato de iCal. Primero creamos una instancia de clase icalendar.Calendar.

cal = Calendar()


Cada instancia del calendario es un objeto de clase icalendar.Event que se agrega al calendario usando el método add_component

ical_event = Event()
cal.add_component(ical_event)


Ahora vamos a llenar los datos del evento. Para añadir nuevos parámetros a la instancia de la clase icalendar.Event vamos a usar el método add. En el parámetro dtstart uso se guarda el timestamp de la fecha de initio de evento y en dtend - la fecha final. El parámetro summary contiene el nombre de la actividad. En uid vamos a guardar el id de nuestro objeto.

from icalendar import Calendar, Event
    class CalendarICalView(View):
        def get(self, request, *args, **kwargs):
            activities = Activity.objects.all()
            cal = Calendar()
            for activity in activities:
                event_date_local = localtime(activity.date)
                ical_event = Event()
                ical_event.add('summary', u'{0} / {1}'.format(
                    activity.name,
                    event_date_local.strftime('%I:%M %p'),
                ))
                ical_event.add('dtstart', event_date_local)
                ical_event.add(
                    'dtend',
                    event_date_local + datetime.timedelta(minutes=activity.duration),
                )
                ical_event['uid'] = activity.id
                cal.add_component(ical_event)
                response = HttpResponse(cal.to_ical(), mimetype="text/calendar")
                response['Content-Disposition'] = 'attachment; filename=calendario.ics'
                return response

En la página de documentación se puede encontrar la información más detallada sobre la librería icalendar.

Learn more by receiving an email once a month.

Additional Insights

Django and haystack-part I

Haystack/Django You can use Haystack to index and search for text in any field in any of the models you have defined in your ...

Author Javier Rojas Javier Rojas

Mixin para animaciones con Compass

Como bien es sabido, normalmente para realizar animaciones se tiene que tener en cuenta los distintos navegadores y sus pref...

Photo of the author: Jorge Olaya Jorge Olaya

Comida gratis en AxiaCore

Mantener unos hábitos alimenticios adecuados en el trabajo puede resultar difícil, pero todo es más fácil cuando las compañía...

Photo of the author: Carolina Muñoz Carolina Muñoz