Mercurial > public > sg101
view gpp/smiley/models.py @ 133:c515b7401078
Use the new common way to apply markItUp to textareas and to get the smiley and markdown help dialogs for all the remaining apps except for forums and comments.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Fri, 27 Nov 2009 00:21:47 +0000 |
parents | 48621ba5c385 |
children | 3a626c48e9ae |
line wrap: on
line source
""" Models for the smiley application. """ from django.db import models from django.core.cache import cache CACHE_TIMEOUT = 60 * 60 # seconds class SmileyManager(models.Manager): def get_smiley_map(self): """ Returns a dictionary of 2-tuples, indexed by smiley codes. Element 0 of the tuple is the HTML representation of the smiley, and element 1 is the markdown version. The dictionary is cached. """ map = cache.get('smiley_map') if map: return map map = dict((s.code, (s.html(), s.markdown())) for s in self.all()) cache.set('smiley_map', map, CACHE_TIMEOUT) return map def get_smilies(self, extra=False): key = 'smileys' if not extra else 'smileys_extra' smilies = cache.get(key) if smilies: return smilies smilies = self.filter(is_extra=extra) cache.set(key, smilies, CACHE_TIMEOUT) return smilies class Smiley(models.Model): image = models.ImageField(upload_to='smiley/images/') title = models.CharField(max_length=32) code = models.CharField(max_length=32) is_extra = models.BooleanField() objects = SmileyManager() class Meta: verbose_name_plural = 'Smilies' ordering = ('title', ) def __unicode__(self): return self.title def get_absolute_url(self): return self.image.url def html(self): """Returns a HTML img tag representation of the smiley.""" if self.image: return (u'<img src="%s" alt="%s" title="%s" />' % (self.get_absolute_url(), self.title, self.title)) return u'' html.allow_tags = True def markdown(self): """Returns a markdown representation of the smiley.""" if self.image: return (u'![%s](%s "%s")' % (self.title, self.get_absolute_url(), self.title)) return u''