import os, re, random from django import template from django.conf import settings register = template.Library() def random_pic(parser, token): try: tag_name, dir_name = token.split_contents() except ValueError: raise template.TemplateSyntaxError, "%r tag requires a single argument" % token.contents.split()[0] if not (dir_name[0] == dir_name[-1] and dir_name[0] in ('"', "'")): raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name return RandomPicNode(dir_name[1:-1]) class RandomPicNode(template.Node): def __init__(self, dir_name): self.dir_name = dir_name def filter(self, filelist): regex = re.compile(r'(\.jp[e]*g|\.png|\.gif)', re.I) return [pic for pic in filelist if re.search(regex, pic)] def render(self, context): try: pics = self.filter(os.listdir(os.path.join(settings.MEDIA_ROOT, self.dir_name))) filename = random.choice(pics) except: return "" return os.path.join(settings.MEDIA_URL, self.dir_name, filename) register.tag(random_pic)