diff --git a/symposion_project/apps/sponsorship/admin.py b/symposion_project/apps/sponsorship/admin.py index b69aff91..e234e794 100644 --- a/symposion_project/apps/sponsorship/admin.py +++ b/symposion_project/apps/sponsorship/admin.py @@ -3,5 +3,5 @@ from django.contrib import admin from sponsorship.models import SponsorLevel, Sponsor -admin.site.register(SponsorLevel) -admin.site.register(Sponsor) +admin.site.register(SponsorLevel, list_display=("order", "name")) +admin.site.register(Sponsor, list_display=("name", "level", "added", "active"), list_filter = ("level", )) diff --git a/symposion_project/apps/sponsorship/models.py b/symposion_project/apps/sponsorship/models.py index 743f6d75..f77de766 100644 --- a/symposion_project/apps/sponsorship/models.py +++ b/symposion_project/apps/sponsorship/models.py @@ -14,6 +14,9 @@ class SponsorLevel(models.Model): def __unicode__(self): return self.name + + def sponsors(self): + return self.sponsor_set.filter(active=True).order_by("added") class Sponsor(models.Model): diff --git a/symposion_project/apps/sponsorship/templatetags/sponsorship_tags.py b/symposion_project/apps/sponsorship/templatetags/sponsorship_tags.py index baae404b..1c59be41 100644 --- a/symposion_project/apps/sponsorship/templatetags/sponsorship_tags.py +++ b/symposion_project/apps/sponsorship/templatetags/sponsorship_tags.py @@ -1,6 +1,6 @@ from django import template -from sponsorship.models import Sponsor +from sponsorship.models import Sponsor, SponsorLevel register = template.Library() @@ -11,33 +11,62 @@ class SponsorsNode(template.Node): @classmethod def handle_token(cls, parser, token): bits = token.split_contents() - if len(bits) != 4: - raise template.TemplateSyntaxError("%r takes exactly three arguments " - "(second argument must be 'as')" % bits[0]) - if bits[2] != "as": - raise template.TemplateSyntaxError("Second argument to %r must be " - "'as'" % bits[0]) - return cls(bits[1], bits[3]) + 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, level, context_var): - self.level = template.Variable(level) + 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): - level = self.level.resolve(context) - queryset = Sponsor.objects.filter( - level__name__iexact = level, - active = True - ).order_by( - "added" - ) + if self.level: + level = self.level.resolve(context) + queryset = Sponsor.objects.filter(level__name__iexact = level, active = True).order_by("added") + else: + queryset = Sponsor.objects.filter(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): + context[self.context_var] = SponsorLevel.objects.all() + return u"" + + @register.tag def sponsors(parser, token): """ - {% sponsors "gold" as sponsors %} + {% 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 diff --git a/symposion_project/requirements/project.txt b/symposion_project/requirements/project.txt index 6d8b1485..0d0fa5f3 100644 --- a/symposion_project/requirements/project.txt +++ b/symposion_project/requirements/project.txt @@ -4,4 +4,7 @@ --requirement=base.txt # Put project-specific requirements here. -# See http://pip-installer.org/requirement-format.html for more information. \ No newline at end of file +# See http://pip-installer.org/requirement-format.html for more information. + +PIL==1.1.7 +easy-thumbnails==1.0-alpha-21 diff --git a/symposion_project/settings.py b/symposion_project/settings.py index c84b830a..4bef98ec 100644 --- a/symposion_project/settings.py +++ b/symposion_project/settings.py @@ -157,6 +157,7 @@ INSTALLED_APPS = [ "timezones", "emailconfirmation", "metron", + "easy_thumbnails", # Pinax "pinax.apps.account", @@ -164,6 +165,7 @@ INSTALLED_APPS = [ # project "about", + "sponsorship", ] FIXTURE_DIRS = [ diff --git a/symposion_project/templates/sponsorship/_horizontal_by_level.html b/symposion_project/templates/sponsorship/_horizontal_by_level.html new file mode 100644 index 00000000..98025053 --- /dev/null +++ b/symposion_project/templates/sponsorship/_horizontal_by_level.html @@ -0,0 +1,11 @@ +{% load sponsorship_tags %} +{% sponsor_levels as levels %} + diff --git a/symposion_project/templates/sponsorship/_sponsor_link.html b/symposion_project/templates/sponsorship/_sponsor_link.html new file mode 100644 index 00000000..39d9aade --- /dev/null +++ b/symposion_project/templates/sponsorship/_sponsor_link.html @@ -0,0 +1,10 @@ +{% load thumbnail %} +{% spaceless %} + + {% if dimensions %} + {{ sponsor.name }} + {% else %} + {{ sponsor.name }} + {% endif %} + +{% endspaceless %} diff --git a/symposion_project/templates/sponsorship/_vertical_by_level.html b/symposion_project/templates/sponsorship/_vertical_by_level.html new file mode 100644 index 00000000..b2ed5ec4 --- /dev/null +++ b/symposion_project/templates/sponsorship/_vertical_by_level.html @@ -0,0 +1,13 @@ +{% load sponsorship_tags %} +{% sponsor_levels as levels %} + diff --git a/symposion_project/templates/sponsorship/_wall.html b/symposion_project/templates/sponsorship/_wall.html new file mode 100644 index 00000000..7f1b9896 --- /dev/null +++ b/symposion_project/templates/sponsorship/_wall.html @@ -0,0 +1,7 @@ +{% load sponsorship_tags %} +{% sponsors as sponsors %} +