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…
Reference in a new issue