X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/4949e1da2861107d61900f930d82cac11e92db98..1a798a8611063ff9abc2b8cd9104e45580f7bffd:/chunks/templatetags/chunks.py diff --git a/chunks/templatetags/chunks.py b/chunks/templatetags/chunks.py new file mode 100644 index 0000000..083c48a --- /dev/null +++ b/chunks/templatetags/chunks.py @@ -0,0 +1,63 @@ +from django import template +from django.db import models +from django.core.cache import cache + + +register = template.Library() + +Chunk = models.get_model('chunks', 'chunk') +Attachment = models.get_model('chunks', 'attachment') + + +def do_get_chunk(parser, token): + # split_contents() knows not to split quoted strings. + tokens = token.split_contents() + if len(tokens) < 2 or len(tokens) > 3: + raise template.TemplateSyntaxError, "%r tag should have either 2 or 3 arguments" % (tokens[0],) + if len(tokens) == 2: + tag_name, key = tokens + cache_time = 0 + if len(tokens) == 3: + tag_name, key, cache_time = tokens + # Check to see if the key is properly double/single quoted + if not (key[0] == key[-1] and key[0] in ('"', "'")): + raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name + # Send key without quotes and caching time + return ChunkNode(key[1:-1], cache_time) + + +class ChunkNode(template.Node): + def __init__(self, key, cache_time=0): + self.key = key + self.cache_time = cache_time + + def render(self, context): + try: + cache_key = 'chunk_' + self.key + c = cache.get(cache_key) + if c is None: + c = Chunk.objects.get(key=self.key) + cache.set(cache_key, c, int(self.cache_time)) + content = c.content + except Chunk.DoesNotExist: + n = Chunk(key=self.key) + n.save() + return '' + return content + +register.tag('chunk', do_get_chunk) + + +def attachment(key, cache_time=0): + try: + cache_key = 'attachment_' + key + c = cache.get(cache_key) + if c is None: + c = Attachment.objects.get(key=key) + cache.set(cache_key, c, int(cache_time)) + return c.attachment.url + except Attachment.DoesNotExist: + return '' + +register.simple_tag(attachment) +