from django.utils.translation import ugettext_lazy as _
#_____________________________________________________________________________
# AbstractPageTranslation
class AbstractPageTranslation(models.Model):
FR_CODE = 'fr'
DE_CODE ='de'
FR_NAME = _('french')
DE_NAME = _('german')
LANG_CHOICES = (
(FR_CODE, FR_NAME),
(DE_CODE, DE_NAME),
)
TRANSLATIONS_AVAILABLE = [key for key, val in LANG_CHOICES]
language = models.CharField(
_('language'),
max_length = 3,
choices = LANG_CHOICES,
help_text = _('The language this translation is made for.')
)
title = models.CharField(
verbose_name = _('title'),
max_length = 255,
help_text = _("Name as you'd like it to be seen by the public")
)
slug = models.SlugField(
verbose_name=_('slug'),
max_length=255,
help_text=_("The title as it will appear in URLs e.g http://domain.com/blog/[my-slug]/")
)
panels = [
FieldPanel('language'),
FieldPanel('title'),
FieldPanel('slug')
]
class Meta:
verbose_name = _('Abstract Page Translation')
verbose_name_plural = _('Abstract Page Translations'
abstract = True
def __str__(self):
return '{0} {1}'.format(self.title, self.language)
#_____________________________________________________________________________
# BasePage
class BasePage(Page):
...
translation_panels = [
InlinePanel('base_page_translations', max_num=4, label=_('Page translations')),
]
edit_handler = TabbedInterface([
ObjectList(content_panels, heading=_('Content')),
ObjectList(translation_panels, heading=_('Translations')),
ObjectList(Page.promote_panels, heading=_('Promote')),
ObjectList(Page.settings_panels, heading=_('Settings'), classname="settings"),
])
class Meta:
verbose_name = _('Basepage')
def route(self, request, path_components):
current_lang = get_language()
if not current_lang in AbstractPageTranslation.TRANSLATIONS_AVAILABLE:
raise Http404
if path_components:
child_slug = path_components[0]
remaining_components = path_components[1:]
subpage = self.get_children()
subpage = subpage.filter(
base_page_translations__language=current_lang
)
try:
subpage.get(slug=child_slug)
except Page.DoesNotExist:
raise Http404
return subpage.specific.route(request, remaining_components)
else:
if self.live:
return RouteResult(self)
else:
raise Http404
#_____________________________________________________________________________
# BasePageTranslation
class BasePageTranslation(AbstractPageTranslation):
page = ParentalKey('cms.BasePage', related_name='base_page_translations', verbose_name = _('page to translate'))
P1 id = 1
T1 id = 1, p_id = 1, lang = 'fr'
T2 id = 2, p_id = 1, lang = 'de'
T3 id = 3, p_id = 1, lang = 'nl'
T4 id = 4, p_id = 1, lang = 'nl' ERROR lang & p_id already exist.
class MyPage(model.Model):
"""
Model to store values for the default language
"""
title = models.CharField(
verbose_name = _('title'),
max_length = 255,
help_text = _("Name as you'd like it to be seen by the public")
)
slug = models.SlugField(
verbose_name=_('slug'),
max_length=255,
help_text=_("The title as it will appear in URLs e.g http://domain.com/blog/[my-slug]/")
)
body = models.textField(blank=True)
class PageTranslation(model.Model):
"""
Model to store the values for a specific language
"""
page = models.ForeignKey(MyPage)
language = models.CharField(choices = LANG_CHOICES)
title = models.CharField()
slug = models.SlugField()
body = models.textField(blank=True)
class Meta:
unique_together = ('page', 'language')class MyPage(Page):
# title comes from Page
# slug comes from Page body = models.textField(blank=True)
translation_panels = [
InlinePanel('my_page_translations', max_num=4, label='Page translations'),
]
edit_handler = TabbedInterface([
...
ObjectList(Page.settings_panels, heading='Settings', classname="settings"),
])
class Translation(models.Model):
page = ParentalKey('youapp.MyPage', related_name='my_page_translations')
language = models.CharField(choices = LANG_CHOICES)
title = models.CharField()
body = models.textField(blank=True)
panels = [
FieldPanel('language'),
...
]
Sorry I am still student I begin.
class CityPage(Page): translation_panels = [ InlinePanel('base_page_translations'), ]
def route(self, request, path_components):
subpage = subpage.filter(
base_page_translations__language=current_lang )
class CityPageTranslation(AbstractPageTranslation):
page = ParentalKey('cms.CityPage', related_name='city_page_translations')
class DetailPage(Page):
translation_panels = [
InlinePanel('base_page_translations'),
]
def route(self, request, path_components):
subpage = subpage.filter(
base_page_translations__language=current_lang
)
class DetailPageTranslation(AbstractPageTranslation):
page = ParentalKey('cms.DetailPage', related_name='detail_page_translations')
translation = DetailPageTranslation.objects.all()[0]translated_page = translation.pagepage_translations = translated_page.detail_page_translationsclass AbstractPage(Page):
""" common things """
class Meta:
verbose_name = _('Abstract Page')
verbose_name_plural = _('Abstract Page'
abstract = True
from django.utils.translation import ugettext_lazy as _
@route(_(r'^for-(?P<target_slug>[-\w]+)/$'))
def route(self, request, path_components):
if path_components:
child_slug = path_components[0]
remaining_components = path_components[1:]
raise
else:
what_is = self
path = request.path
raise
|
@route(_(r'^for-(?P<target_slug>[-\w]+)/$'))
def for_target_group(self, request, target_slug):
target_key = TargetGroup.get_key_for_name(target_slug)
if target_key:
url = self.get_redirect_url(
'events_for_target_group',
kwargs = {
'target_slug': target_slug,
'event_model_slug': Lecture._meta.verbose_name_plural.lower()
}
)
return redirect(url)