You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.9 KiB
136 lines
3.9 KiB
# -*- 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 = list(set(all_field_names) - {'master', 'master_id', 'id', 'language_code'})
|
|
field_items = {}
|
|
for fname in clear_f_n:
|
|
field_items[fname] = getattr(self, fname)
|
|
|
|
langs = [lan[0] for lan in settings.LANGUAGES]
|
|
for lang in langs:
|
|
if lang not in self.get_available_languages():
|
|
self.translate(lang)
|
|
for key, value in field_items.items():
|
|
setattr(self, key, value)
|
|
self.save_translations(self)
|
|
return self
|
|
|
|
def __unicode__(self):
|
|
return self.url
|
|
|