Blog
Cómo exportar los datos a iCal en Django

Vera Mazhuga
Software Developer
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
.
Written by Vera Mazhuga

Vera specializes in writing and maintaining code for various applications. Her focus on problem-solving and efficient programming ensures reliable and effective software solutions.
Scale your company with the same people
Practical ideas to do more and get back your time every week
We respect your inbox. Privacy policy