added localized deschription fields osed for the meta description tag on the page for SEO.

This commit is contained in:
2016-10-14 21:25:23 +02:00
parent 4659eced63
commit 731828e1ee
6 changed files with 194 additions and 40 deletions

View File

@@ -37,11 +37,13 @@ class PageAdmin(admin.ModelAdmin):
search_fields = ('menu_name_de', 'title_de',) search_fields = ('menu_name_de', 'title_de',)
fieldsets = ( fieldsets = (
('Deutsch', { ('Deutsch', {
'fields': ('menu_name_de', 'title_de', 'pdf_de', 'content_de',), 'fields': ('menu_name_de', 'title_de', 'description_de', 'pdf_de',
'content_de',),
'classes': ('grp-collapse grp-open',), 'classes': ('grp-collapse grp-open',),
}), }),
('English', { ('English', {
'fields': ('menu_name_en', 'title_en', 'pdf_en', 'content_en'), 'fields': ('menu_name_en', 'title_en', 'description_en', 'pdf_en',
'content_en'),
'classes': ('grp-collapse grp-closed',), 'classes': ('grp-collapse grp-closed',),
}), }),
('Meta Data', { ('Meta Data', {

View File

@@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('content', '0002_auto_20150823_2232'),
]
operations = [
migrations.AddField(
model_name='page',
name='date_created',
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='first created at', editable=False, db_index=True),
),
migrations.AddField(
model_name='page',
name='date_modified',
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='latest updated at', editable=False),
),
migrations.AlterField(
model_name='article',
name='date_created',
field=models.DateTimeField(auto_now_add=True, verbose_name='Erstellt'),
),
migrations.AlterField(
model_name='page',
name='content_type',
field=models.IntegerField(verbose_name='Inhaltstyp', choices=[(0, 'Django View'), (1, 'HTML'), (2, 'PDF')]),
),
migrations.AlterField(
model_name='page',
name='path',
field=models.CharField(verbose_name='Pfad', unique=True, max_length=255, editable=False, db_index=True),
),
migrations.AlterField(
model_name='page',
name='slug',
field=models.SlugField(help_text='The name of the page as it will appear in URLs e.g http://domain.com/blog/[my-slug]/', max_length=100, verbose_name='Slug'),
),
migrations.AlterField(
model_name='page',
name='template',
field=models.CharField(default=b'content/page.html', max_length=255, verbose_name='Vorlage'),
),
migrations.AlterField(
model_name='page',
name='title_de',
field=models.CharField(help_text="The page title as you'd like it to be seen by the public", max_length=255, verbose_name=b'Titel'),
),
migrations.AlterField(
model_name='page',
name='title_en',
field=models.CharField(help_text="The page title as you'd like it to be seen by the public", max_length=255, verbose_name=b'Title', blank=True),
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('content', '0003_auto_20161012_2205'),
]
operations = [
migrations.AlterField(
model_name='page',
name='date_created',
field=models.DateTimeField(auto_now_add=True, verbose_name='first created at', db_index=True),
),
migrations.AlterField(
model_name='page',
name='date_modified',
field=models.DateTimeField(auto_now=True, verbose_name='latest updated at'),
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('content', '0004_auto_20161012_2206'),
]
operations = [
migrations.AddField(
model_name='page',
name='description_de',
field=models.TextField(verbose_name='search description', blank=True),
),
migrations.AddField(
model_name='page',
name='description_en',
field=models.TextField(verbose_name='search description', blank=True),
),
]

View File

@@ -1,20 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from os import path from os import path
from ckeditor.fields import RichTextField
from django.conf import settings from django.conf import settings
from django.utils.timezone import now
from django.core.urlresolvers import reverse
from django.core.cache import cache from django.core.cache import cache
from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
from django.db import models from django.db import models
from django.template.defaultfilters import slugify from django.template.defaultfilters import slugify
from django.utils import timezone
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import get_language, ugettext as _ from django.utils.translation import get_language, ugettext as _
from django.core.exceptions import ValidationError
from ckeditor.fields import RichTextField
from utils import STATUS_CHOICES, STATUS_WAITING, STATUS_PUBLISHED, \ from utils import STATUS_CHOICES, STATUS_WAITING, STATUS_PUBLISHED, \
cleaner cleaner
CONTENT_CHOICES = ( CONTENT_CHOICES = (
(0, u'Django View'), (0, u'Django View'),
(1, u'HTML'), (1, u'HTML'),
@@ -39,12 +39,12 @@ def get_upload_path(instance, filename):
class ArticleManager(models.Manager): class ArticleManager(models.Manager):
def get_queryset(self): def get_queryset(self):
return super(ArticleManager, self).get_queryset().select_related('author', 'category') return super(ArticleManager, self).get_queryset().select_related(
'author', 'category')
def published(self): def published(self):
return self.filter(status=STATUS_PUBLISHED, date_created__lte=now()) return self.filter(status=STATUS_PUBLISHED, date_created__lte=timezone.now())
class Article(models.Model): class Article(models.Model):
@@ -60,7 +60,7 @@ class Article(models.Model):
verbose_name=_('Author')) verbose_name=_('Author'))
status = models.SmallIntegerField(_('Status'), choices=STATUS_CHOICES, status = models.SmallIntegerField(_('Status'), choices=STATUS_CHOICES,
default=STATUS_PUBLISHED) default=STATUS_PUBLISHED)
date_created = models.DateTimeField(_('Created'), blank=True) date_created = models.DateTimeField(_('Created'), auto_now_add=True)
date_modified = models.DateTimeField(_('Modified'), auto_now=True) date_modified = models.DateTimeField(_('Modified'), auto_now=True)
objects = ArticleManager() objects = ArticleManager()
@@ -71,7 +71,7 @@ class Article(models.Model):
def clean(self): def clean(self):
if not self.date_created: if not self.date_created:
self.date_created = now() self.date_created = timezone.now()
if not self.slug: if not self.slug:
self.slug = slugify(self.headline_de)[:50] self.slug = slugify(self.headline_de)[:50]
self.content_de = cleaner.clean_html(self.content_de) self.content_de = cleaner.clean_html(self.content_de)
@@ -121,42 +121,83 @@ class Page(models.Model):
angeboten. angeboten.
""" """
menu_name_de = models.CharField( menu_name_de = models.CharField(
'Menü Name',
max_length=255, max_length=255,
verbose_name='Menü Name',
help_text=_('The short name for the menu-entry of this page') help_text=_('The short name for the menu-entry of this page')
) )
menu_name_en = models.CharField( menu_name_en = models.CharField(
'Menu Name',
max_length=255, max_length=255,
blank=True, blank=True,
verbose_name='Menu Name',
help_text=_('The short name for the menu-entry of this page') help_text=_('The short name for the menu-entry of this page')
) )
title_de = models.CharField('Titel', max_length=255, title_de = models.CharField(
help_text=_( max_length=255,
'This title appears in the HTML header')) verbose_name='Titel',
title_en = models.CharField('Title', max_length=255, blank=True, help_text=_("The page title as you'd like it to be seen by the public"))
help_text=_( title_en = models.CharField(
'This title appears in the HTML header')) max_length=255,
slug = models.SlugField(_('slug')) blank=True,
path = models.CharField(_('Path'), max_length=100, db_index=True, verbose_name='Title',
editable=False, unique=True) help_text=_("The page title as you'd like it to be seen by the public"))
slug = models.SlugField(
parent = models.ForeignKey('self', blank=True, null=True, verbose_name=_('slug'),
max_length=100,
help_text=_("The name of the page as it will appear in URLs e.g http://domain.com/blog/[my-slug]/")
)
path = models.CharField(
max_length=255,
db_index=True,
editable=False,
unique=True,
verbose_name=_('Path'),
)
parent = models.ForeignKey(
'self',
blank=True,
null=True,
related_name='subpages', related_name='subpages',
on_delete=models.SET_NULL) on_delete=models.SET_NULL
position = models.PositiveSmallIntegerField(_('Position'), )
blank=True, null=True) position = models.PositiveSmallIntegerField(
status = models.SmallIntegerField(_('status'), choices=STATUS_CHOICES, blank=True,
default=STATUS_WAITING) null=True,
content_type = models.IntegerField(choices=CONTENT_CHOICES) verbose_name=_('Position')
)
status = models.SmallIntegerField(
choices=STATUS_CHOICES,
default=STATUS_WAITING,
verbose_name=_('status')
)
description_de = models.TextField(verbose_name=_('search description'), blank=True)
description_en = models.TextField(verbose_name=_('search description'), blank=True)
content_type = models.IntegerField(
choices=CONTENT_CHOICES,
verbose_name=_('content type'))
content_de = RichTextField('Inhalt', blank=True) content_de = RichTextField('Inhalt', blank=True)
content_en = RichTextField('Content', blank=True) content_en = RichTextField('Content', blank=True)
enable_comments = models.BooleanField(_('enable comments'), default=True) enable_comments = models.BooleanField(
template = models.CharField(_('Template'), max_length=100, default=True,
default="content/page.html") verbose_name=_('enable comments')
)
template = models.CharField(
max_length=255,
default="content/page.html",
verbose_name=_('Template'),
)
pdf_de = models.FileField(upload_to='pdf/de/', blank=True, null=True) pdf_de = models.FileField(upload_to='pdf/de/', blank=True, null=True)
pdf_en = models.FileField(upload_to='pdf/en/', blank=True, null=True) pdf_en = models.FileField(upload_to='pdf/en/', blank=True, null=True)
date_created = models.DateTimeField(
auto_now_add=True,
db_index=True,
editable=False,
verbose_name=_('first created at'),
)
date_modified = models.DateTimeField(
auto_now=True,
editable=False,
verbose_name=_('latest updated at'),
)
def __unicode__(self): def __unicode__(self):
return u'%s' % self.title return u'%s' % self.title
@@ -170,6 +211,10 @@ class Page(models.Model):
def css_class(self): def css_class(self):
return CONTENT_CHOICES[self.content_type][1].lower().replace(' ', '_') return CONTENT_CHOICES[self.content_type][1].lower().replace(' ', '_')
@property
def description(self):
return getattr(self, "description_%s" % get_language()) or self.description_de
@property @property
def menu_name(self): def menu_name(self):
return getattr(self, return getattr(self,

View File

@@ -4,7 +4,6 @@ from .models import Article, Page
class ArticleSitemap(Sitemap): class ArticleSitemap(Sitemap):
changefreq = "never" changefreq = "never"
priority = 0.6 priority = 0.6
protocol = 'https'
def items(self): def items(self):
return Article.objects.published() return Article.objects.published()
@@ -16,10 +15,10 @@ class ArticleSitemap(Sitemap):
class PageSitemap(Sitemap): class PageSitemap(Sitemap):
changefreq = "monthly" changefreq = "monthly"
priority = 0.4 priority = 0.4
protocol = 'https'
def items(self): def items(self):
return Page.objects.all() #filter(status__gt=0) return Page.objects.all() #filter(status__gt=0)
def location(self, page): def lastmod(self, page):
return page.get_absolute_url() return page.date_modified