added sponsorship template tags and template fragments; improved admin
This commit is contained in:
		
							parent
							
								
									64569bccc7
								
							
						
					
					
						commit
						e4e7b890a2
					
				
					 9 changed files with 99 additions and 21 deletions
				
			
		|  | @ -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", )) | ||||
|  |  | |||
|  | @ -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): | ||||
|  |  | |||
|  | @ -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) | ||||
|      | ||||
|  | @ -4,4 +4,7 @@ | |||
| --requirement=base.txt | ||||
| 
 | ||||
| # Put project-specific requirements here. | ||||
| # See http://pip-installer.org/requirement-format.html for more information. | ||||
| # See http://pip-installer.org/requirement-format.html for more information. | ||||
| 
 | ||||
| PIL==1.1.7 | ||||
| easy-thumbnails==1.0-alpha-21 | ||||
|  |  | |||
|  | @ -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 = [ | ||||
|  |  | |||
|  | @ -0,0 +1,11 @@ | |||
| {% load sponsorship_tags %} | ||||
| {% sponsor_levels as levels %} | ||||
| <div class="sponsor-list"> | ||||
| {% for level in levels %} | ||||
|     <h3>{{ level.name }}</h3> | ||||
|      | ||||
|     {% for sponsor in level.sponsors %} | ||||
|         {% include "sponsorship/_sponsor_link.html" with sponsor=sponsor %} | ||||
|     {% endfor %} | ||||
| {% endfor %} | ||||
| </div> | ||||
							
								
								
									
										10
									
								
								symposion_project/templates/sponsorship/_sponsor_link.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								symposion_project/templates/sponsorship/_sponsor_link.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| {% load thumbnail %} | ||||
| {% spaceless %} | ||||
| <a href="{{ sponsor.external_url }}"> | ||||
|     {% if dimensions %} | ||||
|         <img src="{% thumbnail sponsor.logo dimensions %}" alt="{{ sponsor.name }}" /> | ||||
|     {% else %} | ||||
|         <img src="{% thumbnail sponsor.logo '150x150' %}" alt="{{ sponsor.name }}" /> | ||||
|     {% endif %} | ||||
| </a> | ||||
| {% endspaceless %} | ||||
|  | @ -0,0 +1,13 @@ | |||
| {% load sponsorship_tags %} | ||||
| {% sponsor_levels as levels %} | ||||
| <div class="sponsor-list"> | ||||
| {% for level in levels %} | ||||
|     <h3>{{ level.name }}</h3> | ||||
|      | ||||
|     {% for sponsor in level.sponsors %} | ||||
|         <div> | ||||
|             {% include "sponsorship/_sponsor_link.html" with sponsor=sponsor %} | ||||
|         </div> | ||||
|     {% endfor %} | ||||
| {% endfor %} | ||||
| </div> | ||||
							
								
								
									
										7
									
								
								symposion_project/templates/sponsorship/_wall.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								symposion_project/templates/sponsorship/_wall.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| {% load sponsorship_tags %} | ||||
| {% sponsors as sponsors %} | ||||
| <div class="sponsor-wall"> | ||||
| {% for sponsor in sponsors %} | ||||
|     {% include "sponsorship/_sponsor_link.html" with sponsor=sponsor %} | ||||
| {% endfor %} | ||||
| </div> | ||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 James Tauber
						James Tauber