diff --git a/symposion/sponsorship/templatetags/sponsorship_tags.py b/symposion/sponsorship/templatetags/sponsorship_tags.py new file mode 100644 index 0000000000000000000000000000000000000000..cd1f33ba025d1338402d0f9efff0ca2b09edca7a --- /dev/null +++ b/symposion/sponsorship/templatetags/sponsorship_tags.py @@ -0,0 +1,75 @@ +from django import template + +from symposion.conference.models import current_conference +from symposion.sponsorship.models import Sponsor, SponsorLevel + + +register = template.Library() + + +class SponsorsNode(template.Node): + + @classmethod + def handle_token(cls, parser, token): + bits = token.split_contents() + if len(bits) == 3 and bits[1] == "as": + return cls(bits[2]) + elif len(bits) == 4 and bits[2] == "as": + return cls(bits[3], bits[1]) + else: + raise template.TemplateSyntaxError("%r takes 'as var' or 'level as var'" % bits[0]) + + def __init__(self, context_var, level=None): + if level: + self.level = template.Variable(level) + else: + self.level = None + self.context_var = context_var + + def render(self, context): + conference = current_conference() + if self.level: + level = self.level.resolve(context) + queryset = Sponsor.objects.filter(level__conference = conference, level__name__iexact = level, active = True).order_by("added") + else: + queryset = Sponsor.objects.filter(level__conference = conference, active = True).order_by("level__order", "added") + context[self.context_var] = queryset + return u"" + + +class SponsorLevelNode(template.Node): + + @classmethod + def handle_token(cls, parser, token): + bits = token.split_contents() + if len(bits) == 3 and bits[1] == "as": + return cls(bits[2]) + else: + raise template.TemplateSyntaxError("%r takes 'as var'" % bits[0]) + + def __init__(self, context_var): + self.context_var = context_var + + def render(self, context): + conference = current_conference() + context[self.context_var] = SponsorLevel.objects.filter(conference=conference) + return u"" + + +@register.tag +def sponsors(parser, token): + """ + {% sponsors as all_sponsors %} + or + {% sponsors "gold" as gold_sponsors %} + """ + return SponsorsNode.handle_token(parser, token) + + +@register.tag +def sponsor_levels(parser, token): + """ + {% sponsor_levels as levels %} + """ + return SponsorLevelNode.handle_token(parser, token) + \ No newline at end of file