from datetime import datetime from django.db import models from django.conf import settings import ox class Event(models.Model): class Meta: ordering = ('position', 'date') created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) slug = models.SlugField(blank=True, unique=True) position = models.IntegerField(default=0) title = models.TextField(blank=True) type = models.CharField(blank=True, default='', max_length=1024) date = models.CharField(blank=True, null=True, max_length=1024) body = models.TextField(blank=True, null=True) media = models.TextField(blank=True, null=True) media_caption = models.TextField(blank=True, null=True, default='') data = models.JSONField(default=dict, blank=True, editable=False) def __str__(self): return '%s (%s)' % (ox.strip_tags(self.title), self.slug) def get_absolute_url(self): return '/' + settings.URL_PREFIX + '#' + self.slug @property def display_date(self): if self.date: date = self.date.split(' ') start = date[0].split('-') if len(date) > 1: end = date[1].split('-') else: end = start end_only_month = False start_only_month = False while len(end) < 3: end.append(1) end_only_month = True while len(start) < 3: start.append(1) start_only_month = True start = [int(p) for p in start] end = [int(p) for p in end] display_date = datetime(*start).strftime('%e %B, %Y') if start_only_month: display_date = ' '.join(display_date.split(' ')[1:]) if end != start: end_date = datetime(*end).strftime('%e %B, %Y') if end_only_month: end_date = ' '.join(end_date.split(' ')[1:]) display_date += ' — ' + end_date else: display_date = '' return display_date def media_html(self): html = '' if self.media and self.media.split('.')[-1] in ('jpg', 'png', 'gif'): html += '' % self.media elif '<' in self.media: html = self.media else: url = self.media if 'youtube.com/watch' in url: url = url.replace('/watch?v=', '/embed/') elif 'twitter.com/' in url: url = url.replace('twitter.com', 'nitter.net') html += '' % url if self.media_caption: html = '
%s
%s
' % (html, self.media_caption) return html