1 from django import template
2 from forum.modules import ui
5 register = template.Library()
8 class LoadRegistryNode(template.Node):
9 def __init__(self, registry, separator):
10 self.registry = registry
11 self.separator = separator
13 def render(self, context):
14 separator = self.separator.render(context)
17 for ui_object in self.registry:
19 if ui_object.can_render(context):
22 result += ui_object.render(context)
23 except (KeyError, Exception), e:
25 logging.error("Exception %s rendering ui objects %s: \n%s" % (
26 e, ui_object, traceback.format_exc()
33 def loadregistry(parser, token):
35 tag_name, registry = token.split_contents()
37 raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
39 registry = ui.get_registry_by_name(registry)
40 separator = parser.parse(('endloadregistry',))
41 parser.delete_first_token()
42 return LoadRegistryNode(registry, separator)
45 class LoopRegistryNode(template.Node):
46 def __init__(self, registry, nodelist):
47 self.registry = registry
48 self.nodelist = nodelist
50 def render(self, context):
53 for ui_object in self.registry:
54 if ui_object.can_render(context):
56 ui_object.update_context(context)
57 result += self.nodelist.render(context)
60 logging.error("Exception %s updating ui loop context %s: \n%s" % (
61 e, ui_object, traceback.format_exc()
68 def loopregistry(parser, token):
70 tag_name, registry = token.split_contents()
72 raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
74 registry = ui.get_registry_by_name(registry)
75 nodelist = parser.parse(('endloopregistry',))
76 parser.delete_first_token()
78 return LoopRegistryNode(registry, nodelist)