i18n sponsor fields
Feedback from PyConJP development
```
commit 5973e32ebdc231b209b5c058664e8b2b4a1dbc54
Author: MURAOKA Yusuke <yusuke@jbking.org>
Date:   Mon Mar 31 15:35:40 2014 +0900
    introduce Benefit.content_type which is used to display localized
    text
```
Signed-off-by: Hiroshi Miura <miurahr@linux.com>
			
			
This commit is contained in:
		
							parent
							
								
									91ae3de6df
								
							
						
					
					
						commit
						b50974263c
					
				
					 2 changed files with 57 additions and 3 deletions
				
			
		|  | @ -1,5 +1,6 @@ | |||
| import datetime | ||||
| 
 | ||||
| from django.conf import settings | ||||
| from django.core.exceptions import ValidationError | ||||
| from django.core.urlresolvers import reverse | ||||
| from django.db import models | ||||
|  | @ -144,9 +145,17 @@ post_save.connect(_check_level_change, sender=Sponsor) | |||
| 
 | ||||
| BENEFIT_TYPE_CHOICES = [ | ||||
|     ("text", "Text"), | ||||
|     ("richtext", "Rich Text"), | ||||
|     ("file", "File"), | ||||
|     ("weblogo", "Web Logo"), | ||||
|     ("simple", "Simple") | ||||
|     ("simple", "Simple"), | ||||
|     ("option", "Option") | ||||
| ] | ||||
| 
 | ||||
| CONTENT_TYPE_CHOICES = [ | ||||
|     ("simple", "Simple"), | ||||
| ] + [ | ||||
|     ("listing_text_%s" % lang, "Listing Text (%s)" % label) for lang, label in settings.LANGUAGES | ||||
| ] | ||||
| 
 | ||||
| 
 | ||||
|  | @ -154,8 +163,10 @@ class Benefit(models.Model): | |||
| 
 | ||||
|     name = models.CharField(_("name"), max_length=100) | ||||
|     description = models.TextField(_("description"), blank=True) | ||||
|     type = models.CharField(_("type"), choices=BENEFIT_TYPE_CHOICES, max_length=10, | ||||
|                             default="simple") | ||||
|     type = models.CharField(_("type"), choices=BENEFIT_TYPE_CHOICES, | ||||
|                             max_length=10, default="simple") | ||||
|     content_type = models.CharField(_("content type"), choices=CONTENT_TYPE_CHOICES, | ||||
|                                     max_length=20, default="simple") | ||||
| 
 | ||||
|     def __unicode__(self): | ||||
|         return self.name | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| from django import template | ||||
| from django.template.defaultfilters import linebreaks, urlize | ||||
| 
 | ||||
| from symposion.conference.models import current_conference | ||||
| from symposion.sponsorship.models import Sponsor, SponsorLevel | ||||
|  | @ -75,3 +76,45 @@ def sponsor_levels(parser, token): | |||
|     {% sponsor_levels as levels %} | ||||
|     """ | ||||
|     return SponsorLevelNode.handle_token(parser, token) | ||||
| 
 | ||||
| 
 | ||||
| class LocalizedTextNode(template.Node): | ||||
| 
 | ||||
|     @classmethod | ||||
|     def handle_token(cls, parser, token): | ||||
|         bits = token.split_contents() | ||||
|         if len(bits) == 3: | ||||
|             return cls(bits[2], bits[1][1:-1]) | ||||
|         elif len(bits) == 5 and bits[-2] == "as": | ||||
|             return cls(bits[2], bits[1][1:-1], bits[4]) | ||||
|         else: | ||||
|             raise template.TemplateSyntaxError("%r takes 'as var'" % bits[0]) | ||||
| 
 | ||||
|     def __init__(self, sponsor, content_type, context_var=None): | ||||
|         self.sponsor_var = template.Variable(sponsor) | ||||
|         self.content_type = content_type | ||||
|         self.content_var = context_var | ||||
| 
 | ||||
|     def render(self, context): | ||||
|         s = '' | ||||
|         try: | ||||
|             sponsor = self.sponsor_var.resolve(context) | ||||
|             content_type = '%s_%s' % (self.content_type, context['request'].LANGUAGE_CODE) | ||||
|             texts = sponsor.sponsor_benefits.filter(benefit__content_type=content_type) | ||||
|             if texts.count() > 0: | ||||
|                 s = linebreaks(urlize(texts[0].text, autoescape=True)) | ||||
|             if self.content_var: | ||||
|                 context[self.content_var] = s | ||||
|                 s = '' | ||||
|         except: | ||||
|             pass | ||||
|         return s | ||||
| 
 | ||||
| 
 | ||||
| @register.tag | ||||
| def localized_text(parser, token): | ||||
|     """ | ||||
|     {% localized_text "content_type" sponsor %} | ||||
|     {% localized_text "content_type" sponsor as localized_text %} | ||||
|     """ | ||||
|     return LocalizedTextNode.handle_token(parser, token) | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Hiroshi Miura
						Hiroshi Miura