# -*- coding: utf-8 -*- from django.contrib.syndication.views import Feed from django.shortcuts import get_object_or_404 from django.db import models from exposition.models import Exposition from settings.models import create_transl_fields 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"Ближайшие выставки %s:" % 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"Ближайшие выставки в %s: " % 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"Ближайшие выставки %s: " % 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 save(self, *args, **kwargs): super(Page,self).save(*args, **kwargs) all_field_names = list(self._translated_field_names) clear_f_n = [] for field_name in all_field_names: if field_name not in ['master', 'master_id',u'id', 'language_code']: clear_f_n.append(field_name) field_items = {field_name:getattr(self, field_name) for field_name in clear_f_n} langs = [lan[0] for lan in settings.LANGUAGES] for lang in langs: if lang not in self.get_available_languages(): self.translate(lang) for field in clear_f_n: setattr(self, field, field_items.get(field, '')) super(Page,self).save(*args, **kwargs) return self def __unicode__(self): return self.url