# -*- coding: utf-8 -*- from django.contrib.syndication.views import Feed from django.shortcuts import get_object_or_404 from django.db import models from django.utils.translation import ugettext as _ from exposition.models import Exposition import copy from theme.models import Theme from country.models import Country from city.models import City from hvad.models import TranslatableModel, TranslatedFields # ----------------------- RSS -------------------------- # EXPO_ON_PAGE = 10 # nearest expositions at all class LatestExpositions(Feed): title = _(u"Ближайшие выставки на expomap.ru") link = '/rss/latest/' description = _(u'Подписывайтесь на наш RSS-канал') def items(self): return Exposition.enable.upcoming()[:EXPO_ON_PAGE] def item_title(self, item): return item.name def item_description(self, item): return item.main_title def item_link(self, item): return '/expo/%s/'%item.url NUM_ITEMS_ON_PAGE = 20 class CountryFeeds(Feed): description_template = '/rss/country_feeds/' def get_object(self, request, slug): return get_object_or_404(Country, url=slug) def title(self, obj): return _(u"Ближайшие выставки %(obj)s:") % {'obj': obj.inflect} def link(self,obj): return obj.get_permanent_url() def item_description(self, obj): return obj.main_title def items(self, obj): return Exposition.enable.upcoming().filter(country=obj)[:NUM_ITEMS_ON_PAGE] class CityFeeds(Feed): description_template = '/rss/city_feeds/' def get_object(self, request, slug): return get_object_or_404(City, url=slug) def title(self, obj): return _(u"Ближайшие выставки в %(obj)s: ") % {'obj': obj.inflect} def link(self,obj): return obj.get_permanent_url() def item_description(self, obj): return obj.main_title def items(self, obj): return Exposition.enable.upcoming().filter(city = obj)[:NUM_ITEMS_ON_PAGE] class ThemeFeeds(Feed): description_template = '/rss/theme_feeds/' def get_object(self, request, slug): return get_object_or_404(Theme, url=slug) def title(self, obj): return _(u"Ближайшие выставки %(obj)s: ") % {'obj': obj.inflect} def link(self,obj): return obj.url def item_description(self, obj): return obj.main_title def items(self, obj): return Exposition.enable.upcoming().filter(theme = obj)[:NUM_ITEMS_ON_PAGE] # ------------------------ Page model --------------------------- # from django.conf import settings from django.core.urlresolvers import reverse class Page(TranslatableModel): url = models.SlugField(unique=True) translations = TranslatedFields( h1 = models.CharField(max_length=255), body = models.TextField(), # meta title = models.CharField(max_length=255, blank=True), descriptions = models.CharField(max_length=255, blank=True), keywords = models.CharField(max_length=255, blank=True), ) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) def get_absolute_url(self): return reverse('page_view', args=[self.url]) def __init__(self, *args, **kwargs): super(Page, self).__init__(*args, **kwargs) self.cache_fields = ['h1', 'body','title', 'description', 'keywords'] self.var_cache = {var: copy.copy(getattr(self, var)) for var in self.cache_fields} self.is_new = True def save(self, *args, **kwargs): super(Page,self).save(*args, **kwargs) self.initial_language = 'ru' new_values = {field: getattr(self, field) for field in self.cache_fields} langs = [code for code, _ in settings.LANGUAGES] if self.is_new: for lang in langs: if lang not in self.get_available_languages(): self.translate(lang) for key, value in new_values.items(): setattr(self, key, value) self.save_translations(self) else: translations = {obj.language_code:obj for obj in list(self.translations.all())} for lang in langs: if lang is not self.initial_language: tr = translations[lang] for key, value in new_values.items(): #if u'%s' % getattr(self, key) is u'' or getattr(self, key) is u'%s' % self.var_cache[key]: setattr(tr, key, value) tr.save() self.lazy_translation_getter(self.initial_language) self.var_cache = {var: copy.copy(getattr(self, var)) for var in self.cache_fields} self.is_new = False return self def __unicode__(self): return self.url