From: yomguy Date: Mon, 9 Jul 2012 11:42:22 +0000 (+0200) Subject: add tag to test if app in installed X-Git-Tag: 1.4.4~1^2 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=f59decbfefe7eda2d6fda2dd12859d81bd9ffe51;p=telemeta.git add tag to test if app in installed --- diff --git a/telemeta/templatetags/telemeta_utils.py b/telemeta/templatetags/telemeta_utils.py index f3d56015..bd6f5511 100644 --- a/telemeta/templatetags/telemeta_utils.py +++ b/telemeta/templatetags/telemeta_utils.py @@ -16,6 +16,7 @@ import os import datetime from django.conf import settings from django.template.defaultfilters import stringfilter +from django.template import NodeList register = template.Library() @@ -397,6 +398,45 @@ def mime_to_media_type(mime_type): else: return 'Audio' -@register.filter -def installed(app): - return app in settings.INSTALLED_APPS + +def do_ifloaded(parser, token): + bits = token.split_contents()[1:] + var = bits[0] + nodelist_true = parser.parse(('else', 'endifloaded')) + token = parser.next_token() + if token.contents == 'else': + nodelist_false = parser.parse(('endifloaded',)) + parser.delete_first_token() + else: + nodelist_false = NodeList() + return IfLoadedNode(var, nodelist_true, nodelist_false) +register.tag('ifloaded', do_ifloaded) + + +class IfLoadedNode(template.Node): + def __init__(self, var, nodelist_true, nodelist_false=None): + self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false + self.var = var + + def __repr__(self): + return '' + + def __iter__(self): + for node in self.nodelist_true: + yield node + for node in self.nodelist_false: + yield node + + def get_nodes_by_type(self, nodetype): + nodes = [] + if isinstance(self, nodetype): + nodes.append(self) + nodes.extend(self.nodelist_true.get_nodes_by_type(nodetype)) + nodes.extend(self.nodelist_false.get_nodes_by_type(nodetype)) + return nodes + + def render(self, context): + for app in settings.INSTALLED_APPS: + if str(app) == str(self.var): + return self.nodelist_true.render(context) + return self.nodelist_false.render(context)