|
|
|
|
@ -1,25 +1,25 @@ |
|
|
|
|
# -*- coding: utf-8 -*- |
|
|
|
|
import copy |
|
|
|
|
from django.db import models |
|
|
|
|
from django.utils import translation |
|
|
|
|
from django.db.models.signals import post_save |
|
|
|
|
from django.utils.translation import ugettext_lazy as _ |
|
|
|
|
from django.conf import settings |
|
|
|
|
from django.core.urlresolvers import reverse_lazy |
|
|
|
|
from django.core.cache import cache |
|
|
|
|
from functions.signal_handlers import post_save_handler |
|
|
|
|
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager |
|
|
|
|
from pymorphy.django_conf import default_morph as morph |
|
|
|
|
from functions.signal_handlers import post_save_handler |
|
|
|
|
import copy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# additional funcs |
|
|
|
|
MONTHES = {'jan': _(u'январе'), 'feb': _(u'феврале'), 'mar': _(u'марте'), 'apr': _(u'апреле'), |
|
|
|
|
def get_month_inflect(value, key): |
|
|
|
|
MONTHES = {'jan': _(u'январе'), 'feb': _(u'феврале'), 'mar': _(u'марте'), 'apr': _(u'апреле'), |
|
|
|
|
'may': _(u'мае'), 'jun': _(u'июне'), u'jul': _(u'июле'), 'aug': _(u'августе'), |
|
|
|
|
'sep': _(u'сентябре'), 'oct': _(u'октябре'), 'nov': _(u'ноябре'), 'dec': _(u'декабре'),} |
|
|
|
|
def get_month_inflect(value, key): |
|
|
|
|
|
|
|
|
|
return {key: MONTHES.get(value, '') } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_obj_inflect(obj, key): |
|
|
|
|
if translation.get_language() == 'ru': |
|
|
|
|
result = {key: getattr(obj, 'inflect', '')} |
|
|
|
|
@ -27,6 +27,7 @@ def get_obj_inflect(obj, key): |
|
|
|
|
result = {key: getattr(obj, 'name', '')} |
|
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_theme_inflect(obj, key): |
|
|
|
|
if translation.get_language() == 'ru': |
|
|
|
|
result = {'theme_inflect': getattr(obj, 'inflect', ''), |
|
|
|
|
@ -36,6 +37,7 @@ def get_theme_inflect(obj, key): |
|
|
|
|
'theme_name': getattr(obj, 'name', '')} |
|
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_tag_inflect(obj, key): |
|
|
|
|
if translation.get_language() == 'ru': |
|
|
|
|
result = {'tag_inflect': getattr(obj, 'inflect', ''), |
|
|
|
|
@ -47,47 +49,54 @@ def get_tag_inflect(obj, key): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MetaSetting(TranslatableModel): |
|
|
|
|
""" |
|
|
|
|
setting that generates meta fields |
|
|
|
|
""" |
|
|
|
|
name = models.CharField(max_length=100, unique=True) |
|
|
|
|
translations = TranslatedFields( |
|
|
|
|
title = models.CharField(max_length=255, blank=True), |
|
|
|
|
description = models.CharField(max_length=255, blank=True), |
|
|
|
|
keywords = models.CharField(max_length=255, blank=True), |
|
|
|
|
h1 = models.CharField(max_length=255, blank=True), |
|
|
|
|
title=models.CharField(max_length=255, blank=True), |
|
|
|
|
description=models.CharField(max_length=255, blank=True), |
|
|
|
|
keywords=models.CharField(max_length=255, blank=True), |
|
|
|
|
h1=models.CharField(max_length=255, blank=True), |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
# params that handles for objects |
|
|
|
|
object_params = {'object_name': 'name', 'object_title': 'main_title', 'city': 'city', 'country': 'country'} |
|
|
|
|
|
|
|
|
|
# default params |
|
|
|
|
params = {'month': get_month_inflect, 'country': get_obj_inflect, 'city': get_obj_inflect, |
|
|
|
|
'theme': get_theme_inflect, 'tag': get_tag_inflect} |
|
|
|
|
|
|
|
|
|
monthes = {'jan': _(u'январе'), 'feb': _(u'феврале'), 'mar': _(u'марте'), 'apr': _(u'апреле'), |
|
|
|
|
'may': _(u'мае'), 'jun': _(u'июне'), u'jul': _(u'июле'), 'aug': _(u'августе'), |
|
|
|
|
'sep': _(u'сентябре'), 'oct': _(u'октябре'), 'nov': _(u'ноябре'), 'dec': _(u'декабре'),} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __unicode__(self): |
|
|
|
|
return self.name |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_meta(self, params, obj=None): |
|
|
|
|
""" |
|
|
|
|
generating meta fields by given params and current object fields |
|
|
|
|
|
|
|
|
|
obj must be in current language |
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
# current language |
|
|
|
|
lang = translation.get_language() |
|
|
|
|
|
|
|
|
|
updates = {} |
|
|
|
|
if obj: |
|
|
|
|
# if objects - generate fields from object_params field |
|
|
|
|
for key, value in self.object_params.iteritems(): |
|
|
|
|
updates.update({key: getattr(obj, value, '')}) |
|
|
|
|
|
|
|
|
|
for key, value in params.iteritems(): |
|
|
|
|
# iterate through default params |
|
|
|
|
if key in self.params: |
|
|
|
|
updates.update(self.params[key](value, key)) |
|
|
|
|
params.update(updates) |
|
|
|
|
|
|
|
|
|
# current translation object |
|
|
|
|
tr = self.translations.get(language_code=lang) |
|
|
|
|
title = tr.title.format(**params) |
|
|
|
|
description = tr.description.format(**params) |
|
|
|
|
keywords = []#tr.keywords.format(**params) |
|
|
|
|
keywords = []#tr.keywords.format(**params) uncoment if keywords need |
|
|
|
|
h1 = tr.h1.format(**params) |
|
|
|
|
|
|
|
|
|
return {'title': title, 'description': description, 'keywords': keywords, 'h1': h1} |
|
|
|
|
@ -101,7 +110,6 @@ class MetaSetting(TranslatableModel): |
|
|
|
|
s = morph.inflect_ru(s, u'пр') |
|
|
|
|
return s |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_title(self): |
|
|
|
|
title = self.title |
|
|
|
|
return title |
|
|
|
|
@ -119,11 +127,6 @@ class MetaSetting(TranslatableModel): |
|
|
|
|
return [] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
post_save.connect(post_save_handler, sender=MetaSetting) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# SEO - tests # |
|
|
|
|
|
|
|
|
|
class SeoTextManager(TranslationManager): |
|
|
|
|
cache_time = 120 |
|
|
|
|
|
|
|
|
|
@ -142,6 +145,9 @@ class SeoTextManager(TranslationManager): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SeoText(TranslatableModel): |
|
|
|
|
""" |
|
|
|
|
store seo data for specified urls |
|
|
|
|
""" |
|
|
|
|
url = models.CharField(max_length=50, unique=True, verbose_name=u"URL: www.expomap.ru") |
|
|
|
|
|
|
|
|
|
translations = TranslatedFields( |
|
|
|
|
@ -191,3 +197,6 @@ class SeoText(TranslatableModel): |
|
|
|
|
|
|
|
|
|
def __unicode__(self): |
|
|
|
|
return self.url |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
post_save.connect(post_save_handler, sender=MetaSetting) |