From 20f6f41c71db41c5f79b165826eca4733a3a5a23 Mon Sep 17 00:00:00 2001 From: Erik Stein Date: Mon, 31 Jul 2017 16:24:41 +0200 Subject: [PATCH] Added PagesTitlesMixin. --- utils/models/__init__.py | 0 utils/models/pages.py | 64 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 utils/models/__init__.py create mode 100644 utils/models/pages.py diff --git a/utils/models/__init__.py b/utils/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/models/pages.py b/utils/models/pages.py new file mode 100644 index 0000000..1f17df3 --- /dev/null +++ b/utils/models/pages.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +# Erik Stein , 2017 + + +from django.db import models +from django.utils.encoding import python_2_unicode_compatible +from django.utils.text import normalize_newlines +from django.utils.translation import ugettext_lazy as _ +from utils.functional import firstof + +from ..fields import AutoSlugField + + +# TODO Use translatable fields by default +@python_2_unicode_compatible +class PageTitlesMixin(models.Model): + """ + A model mixin containg title and slug field for models serving as website + pages with an URL. + """ + short_title = models.CharField(_("Name"), max_length=50) + slug = AutoSlugField(_("URL-Name"), max_length=200, populate_from='short_title', unique_slug=True) + title = models.TextField(_("Titel (Langform)"), null=True, blank=True, max_length=300) + window_title = models.CharField(_("Fenster-/Suchmaschinentitel"), null=True, blank=True, max_length=300) + + class Meta: + abstract = True + + def __str__(self): + return self.short_title + + def get_title(self): + return firstof( + self.title, + self.short_title + ) + + def get_window_title(self): + return firstof( + self.window_title, + self.short_title, + self.get_first_title_line(), + ) + + def get_first_title_line(self): + """ + First line of title field. + """ + return normalize_newlines(self.get_title()).partition("\n")[0] + + def get_subtitle_lines(self): + """ + All but first line of the long title field. + """ + return normalize_newlines(self.title).partition("\n")[2] + + +class PageTitleAdminMixin(object): + search_fields = ['short_title', 'title', 'window_title'] + list_display = ['short_title', 'slug'] + prepopulated_fields = { + 'slug': ('short_title',), + }