import datetime from django.contrib.gis.db import models from django.conf import settings from django.contrib.sitemaps import Sitemap from django.contrib.syndication.views import Feed from PIL import Image from taggit.managers import TaggableManager from locations.models import Location from jrnl.models import Entry from photos.models import PhotoGallery from utils.widgets import markdown_to_html def get_upload_path(self, filename): return "images/guide-images/%s/%s" % (datetime.datetime.today().strftime("%Y"), filename) def get_tn_path(self, filename): return "images/guide-thumbnail/%s/%s" % (datetime.datetime.today().strftime("%Y"), filename) def image_url_replace(str): str = str.replace('[[base_url]]', settings.IMAGES_URL) return str def markdown_processor(md): return markdown_to_html(md) class Guide(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(unique_for_date='pub_date') entry = models.ForeignKey(Entry, null=True, blank=True) body_html = models.TextField(blank=True) body_markdown = models.TextField() dek = models.TextField(null=True, blank=True) pub_date = models.DateTimeField('Date published') location = models.ForeignKey(Location, null=True, blank=True) PUB_STATUS = ( (0, 'Draft'), (1, 'Published'), ) status = models.IntegerField(choices=PUB_STATUS, default=0) photo_gallery = models.ForeignKey(PhotoGallery, blank=True, null=True, verbose_name='photo set') meta_description = models.CharField(max_length=256, null=True, blank=True) TEMPLATES = ( (0, 'single'), (1, 'double'), (2, 'single-dark'), (3, 'double-dark'), ) template_name = models.IntegerField(choices=TEMPLATES, default=0) tags = TaggableManager(blank=True) image = models.FileField(upload_to=get_upload_path, null=True, blank=True) thumbnail = models.FileField(upload_to=get_tn_path, null=True, blank=True) @property def longitude(self): '''Get the site's longitude.''' return self.point.x @property def latitude(self): '''Get the site's latitude.''' return self.point.y class Meta: ordering = ('-pub_date',) get_latest_by = 'pub_date' verbose_name_plural = 'entries' def __unicode__(self): return self.title def get_absolute_url(self): if self.location: return "/travel-guide/location/%s/%s/" % (self.location.slug, self.slug) else: return "/travel-guide/%s/" % (self.slug) def get_thumbnail_url(self): image_dir, img = self.thumbnail.url.split('guide-thumbnail/')[1].split('/') return '%sguide-thumbnail/%s/%s' % (settings.IMAGES_URL, image_dir, img) def get_image_url(self): image_dir, img = self.image.url.split('guide-images/')[1].split('/') return '%sguide-images/%s/%s' % (settings.IMAGES_URL, image_dir, img) def save(self): if self.image: img = Image.open(self.image) self.image_width, self.image_height = img.size img = Image.open(self.thumbnail) self.thumb_width, self.thumb_height = img.size md = image_url_replace(self.body_markdown) self.body_html = markdown_to_html(md) self.dek = markdown_to_html(self.dek) super(Guide, self).save() class GuideSitemap(Sitemap): changefreq = "never" priority = 1.0 def items(self): return Entry.objects.filter(status=1) def lastmod(self, obj): return obj.pub_date class GuideFull(Feed): title = "Luxagraf: Topographical Writings" link = "/writing/" description = "Latest postings to luxagraf.net" description_template = 'feeds/blog_description.html' def items(self): return Entry.objects.filter(status__exact=1).order_by('-pub_date')[:10] #from django.dispatch import dispatcher #from django.db.models import signals #signals.post_save.connect(update_recent, sender=Entry)