diff --git a/requirements/base.txt b/requirements/base.txt index 3537068..2c55f0f 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,5 +1,5 @@ beautifulsoup4 -django +django < 2.0 django-appconf django-ckeditor django-contrib-comments @@ -18,4 +18,4 @@ pytz requests requests-oauthlib social-auth-app-django -social-auth-core \ No newline at end of file +social-auth-core diff --git a/src/content/models.py b/src/content/models.py index 44030cc..3dec6e1 100644 --- a/src/content/models.py +++ b/src/content/models.py @@ -41,6 +41,14 @@ def get_upload_path(instance, filename): return "categories/%s.%s" % (instance.slug, extension) +def get_localized(obj, attr): + """ Return the localilzed field, or the fallback if the localized is empty. + """ + fallback = attr + '_de' + localized = attr + '_' + get_language()[:2] + return getattr(obj, localized) or getattr(obj, fallback) + + class ArticleManager(models.Manager): """Adds some predifined querys and joins some tables for faster querys.""" @@ -118,16 +126,12 @@ class Article(models.Model): @property def headline(self): """Return the localized headline, fallback to german if necessary.""" - return mark_safe( - getattr(self, "headline_%s" % get_language(), self.headline_de) - ) + return mark_safe(get_localized(self, 'headline')) @property def content(self): """Return the localized content, fallback to german if necessary.""" - return mark_safe( - getattr(self, "content_%s" % get_language(), self.content_de) - ) + return mark_safe(get_localized(self, 'content')) class Category(models.Model): @@ -149,13 +153,12 @@ class Category(models.Model): @property def name(self): """Return the localized name, fallback to german if necessary.""" - return getattr(self, "name_%s" % get_language(), self.name_de) + return get_localized(self, 'name') @property def description(self): """Return the localized description, fallback to german if necessary.""" - return getattr(self, "description_%s" % get_language(), - self.description_de) + return get_localized(self, 'description') def get_absolute_url(self): """Return the URL of the article archive, filtered on this category.""" @@ -264,9 +267,7 @@ class Page(models.Model): @property def content(self): """Return the localized content, fallback to german if necessary.""" - return mark_safe( - getattr(self, "content_%s" % get_language()) or self.content_de - ) + return mark_safe(get_localized(self, 'content')) @property def css_class(self): @@ -278,24 +279,22 @@ class Page(models.Model): @property def description(self): """Return the localized description, fallback to german if necessary.""" - return getattr(self, - "description_%s" % get_language()) or self.description_de + return get_localized(self, 'description') @property def menu_name(self): """Return the localized menu name, fallback to german if necessary.""" - return getattr(self, - "menu_name_%s" % get_language()) or self.menu_name_de + return get_localized(self, 'menu_name') @property def pdf_file(self): """Return the localized PDF file, fallback to german if necessary.""" - return getattr(self, "pdf_%s" % get_language(), self.pdf_de) + return get_localized(self, 'pdf_file') @property def title(self): """Return the localized title, fallback to german if necessary.""" - return getattr(self, "title_%s" % get_language()) or self.title_de + return get_localized(self, 'title') def clean(self): """set the URL path, the right content type, and scrub the HTML code.""" diff --git a/src/events/mixins.py b/src/events/mixins.py index 9b9f915..914cc55 100644 --- a/src/events/mixins.py +++ b/src/events/mixins.py @@ -48,9 +48,13 @@ class EventDetailMixin(object): :return: a django QuerySets """ - try: - self.event = models.Event.objects.get(pk=self.kwargs['event']) - queryset = self.model.objects.filter(event=self.event) - except models.Event.DoesNotExist: - raise Http404(_('Event does not exist')) + if self.model == models.Event: + self.event = models.Event.objects.get(pk=self.kwargs['pk']) + queryset = self.model.objects.all() + else: + try: + self.event = models.Event.objects.get(pk=self.kwargs['event']) + queryset = self.model.objects.filter(event=self.event) + except models.Event.DoesNotExist: + raise Http404(_('Event does not exist')) return queryset.prefetch_related()