This commit is contained in:
Rui Manuel da Silva Martins 2015-05-20 10:53:40 +01:00
parent 139d7adb11
commit 588abe760f
9 changed files with 52 additions and 5 deletions

View file

@ -45,6 +45,11 @@ Simple app containing a mixin model that integrates modeltranslation
## Release Notes
### v0.0.5
- Now using django-modeltranslation 0.9.1;
- Fixed problem related to slug field fallbacks;
### v0.0.4
** IMPORTANT: ** make sure that TranslationMixin comes before Page class on model inheritance

Binary file not shown.

View file

@ -9,7 +9,7 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
setup(
name='wagtail-modeltranslation',
version='0.0.4',
version='0.0.5',
packages=['wagtail_modeltranslation'],
include_package_data=True,
license='BSD License',
@ -32,5 +32,5 @@ setup(
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],
install_requires=['django-modeltranslation==0.9', 'wagtail']
install_requires=['django-modeltranslation==0.9.1', 'wagtail']
)

View file

@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: wagtail-modeltranslation
Version: 0.0.4
Version: 0.0.5
Summary: Integration of django-modeltranslation with Wagtail CMS
Home-page: UNKNOWN
Author: Rui Martins
@ -53,6 +53,11 @@ Description: # Wagtail modeltranslation
## Release Notes
### v0.0.5
- Now using django-modeltranslation 0.9.1;
- Fixed problem related to slug field fallbacks;
### v0.0.4
** IMPORTANT: ** make sure that TranslationMixin comes before Page class on model inheritance

View file

@ -1,2 +1,2 @@
django-modeltranslation==0.9
django-modeltranslation==0.9.1
wagtail

View file

@ -8,8 +8,13 @@ from wagtail.wagtailcore.models import Page
class Command(NoArgsCommand):
def set_subtree(self, root, root_path, lang=None):
update_fields = ['url_path_'+lang]
setattr(root, 'url_path_'+lang, root_path)
root.save(update_fields=['url_path_'+lang])
if lang == settings.LANGUAGE_CODE:
setattr(root, 'url_path', root_path)
update_fields.append('url_path')
root.save(update_fields=update_fields)
for child in root.get_children():
slug = getattr(child, 'slug_'+lang)
if not slug or slug == '':

View file

@ -3,11 +3,15 @@
import copy
from django.conf import settings
from django.http import Http404
from django.db.models import Q
from wagtail.wagtailcore.models import Page
from wagtail.wagtailadmin.edit_handlers import FieldPanel,\
MultiFieldPanel, FieldRowPanel
from wagtail.wagtailadmin.views.pages import get_page_edit_handler,\
PAGE_EDIT_HANDLERS
from wagtail.wagtailcore.url_routing import RouteResult
from modeltranslation.translator import translator, NotRegistered
@ -219,3 +223,31 @@ class TranslationMixin(object):
setattr(self, 'url_path_'+lang[0], '/')
return self.url_path
def route(self, request, path_components):
"""
Rewrite route method in order to handle languages fallbacks
"""
if path_components:
# request is for a child of this page
child_slug = path_components[0]
remaining_components = path_components[1:]
try:
q = Q()
for lang in settings.LANGUAGES:
tr_field_name = 'slug_%s' % (lang[0])
condition = {tr_field_name: child_slug}
q |= Q(**condition)
subpage = self.get_children().get(q)
except Page.DoesNotExist:
raise Http404
return subpage.specific.route(request, remaining_components)
else:
# request is for this very page
if self.live:
return RouteResult(self)
else:
raise Http404

Binary file not shown.