]> git.parisson.com Git - telemeta.git/commitdiff
add tag to test if app in installed
authoryomguy <yomguy@parisson.com>
Mon, 9 Jul 2012 11:42:22 +0000 (13:42 +0200)
committeryomguy <yomguy@parisson.com>
Mon, 9 Jul 2012 11:42:22 +0000 (13:42 +0200)
telemeta/templatetags/telemeta_utils.py

index f3d560153f2cab53f356ac38de7a41375408a7dd..bd6f551147466eb7c30a9b3f064819eacc698d55 100644 (file)
@@ -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 '<IfLoaded node>'
+
+    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)