Blog
Cómo exportar los datos a iCal en Django
Vera Mazhuga
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 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