From 0e07f9a85046421e9266b10210eac5347882c8b5 Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Fri, 8 Apr 2016 16:17:06 +0200 Subject: [PATCH] More robus implementation of Post.get_absolute_url --- djangocms_blog/models.py | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/djangocms_blog/models.py b/djangocms_blog/models.py index 9d4503c..8c6be7b 100644 --- a/djangocms_blog/models.py +++ b/djangocms_blog/models.py @@ -17,6 +17,7 @@ from djangocms_text_ckeditor.fields import HTMLField from filer.fields.image import FilerImageField from meta_mixin.models import ModelMeta from parler.models import TranslatableModel, TranslatedFields +from parler.utils.context import switch_language from taggit_autosuggest.managers import TaggableManager from .cms_appconfig import BlogConfig @@ -203,22 +204,25 @@ class Post(KnockerModel, ModelMeta, TranslatableModel): super(Post, self).save_translation(translation, *args, **kwargs) def get_absolute_url(self, lang=None): - if not lang: + if not lang or lang not in self.get_available_languages(): + lang = self.get_current_language() + if not lang or lang not in self.get_available_languages(): lang = get_language() - category = self.categories.first() - kwargs = {} - urlconf = get_setting('PERMALINK_URLS')[self.app_config.url_patterns] - if '' in urlconf: - kwargs['year'] = self.date_published.year - if '' in urlconf: - kwargs['month'] = '%02d' % self.date_published.month - if '' in urlconf: - kwargs['day'] = '%02d' % self.date_published.day - if '' in urlconf: - kwargs['slug'] = self.safe_translation_getter('slug', language_code=lang, any_language=True) # NOQA - if '' in urlconf: - kwargs['category'] = category.safe_translation_getter('slug', language_code=lang, any_language=True) # NOQA - return reverse('%s:post-detail' % self.app_config.namespace, kwargs=kwargs) + with switch_language(self, lang): + category = self.categories.first() + kwargs = {} + urlconf = get_setting('PERMALINK_URLS')[self.app_config.url_patterns] + if '' in urlconf: + kwargs['year'] = self.date_published.year + if '' in urlconf: + kwargs['month'] = '%02d' % self.date_published.month + if '' in urlconf: + kwargs['day'] = '%02d' % self.date_published.day + if '' in urlconf: + kwargs['slug'] = self.safe_translation_getter('slug', language_code=lang, any_language=True) # NOQA + if '' in urlconf: + kwargs['category'] = category.safe_translation_getter('slug', language_code=lang, any_language=True) # NOQA + return reverse('%s:post-detail' % self.app_config.namespace, kwargs=kwargs) def get_meta_attribute(self, param): """