Browse Source

Added PagesTitlesMixin.

backports/m1-live
Erik Stein 8 years ago
parent
commit
20f6f41c71
  1. 0
      utils/models/__init__.py
  2. 64
      utils/models/pages.py

0
utils/models/__init__.py

64
utils/models/pages.py

@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# Erik Stein <code@classlibrary.net>, 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',),
}
Loading…
Cancel
Save