Project

General

Profile

Download (3.76 KB) Statistics
| Branch: | Tag: | Revision:
from datetime import datetime

from django.conf import settings
from django.core.urlresolvers import reverse
from django.views.generic import CreateView, UpdateView, DeleteView, \
ListView, TemplateView
from django.contrib.syndication.views import Feed
from django.utils.feedgenerator import Atom1Feed
from django.utils.http import urlencode

import models
from .forms import AnnounceForm, CategoryForm

class HomepageView(ListView):
model = models.Announce
template_name = 'corbo/homepage.html'

homepage = HomepageView.as_view()

class AnnounceCreateView(CreateView):
form_class = AnnounceForm
template_name = 'corbo/announce_form.html'

def get_success_url(self):
"""
redirect to the category page of the new created announce
"""
return reverse('manage') + '?' + urlencode({'category': self.object.category.id})

add_announce = AnnounceCreateView.as_view()

class AnnounceEditView(UpdateView):
model = models.Announce
form_class = AnnounceForm

def get_success_url(self):
return reverse('manage') + '?' + urlencode({'category': self.object.category.id})

edit_announce = AnnounceEditView.as_view()

class AnnounceDeleteView(DeleteView):
model = models.Announce

def get_success_url(self):
return self.request.META['HTTP_REFERER'] or \
reverse('manage') + '?' + urlencode({'category': self.object.category.id})

delete_announce = AnnounceDeleteView.as_view()

class CategoryCreateView(CreateView):
form_class = CategoryForm
template_name = 'corbo/category_form.html'

def get_success_url(self):
return reverse('manage')

def form_valid(self, form):
form.save()
return super(CategoryCreateView, self).form_valid(form)

add_category = CategoryCreateView.as_view()

class CategoryEditView(UpdateView):
form_class = CategoryForm
model = models.Category

def get_success_url(self):
return self.request.META['HTTP_REFERER'] or \
reverse('manage') + '?' + urlencode({'category': self.object.id})

edit_category = CategoryEditView.as_view()

class DeleteView(DeleteView):
model = models.Category

def get_success_url(self):
return reverse('manage')

delete_category = DeleteView.as_view()

class ManageView(ListView):
paginate_by = settings.ANNOUNCES_PER_PAGE
template_name = 'corbo/manage.html'
model = models.Announce

def get_queryset(self):
queryset = super(ManageView, self).get_queryset()
if self.request.GET.get('category'):
queryset = queryset.filter(category__id=self.request.GET['category'])
return queryset

def get_context_data(self, **kwargs):
context = super(ManageView, self).get_context_data(**kwargs)
context['categories'] = models.Category.objects.all().order_by('-ctime')
if self.request.GET.get('category'):
try:
context['category_id'] = int(self.request.GET['category'])
except:
pass
return context

manage = ManageView.as_view()

class AtomView(Feed):
title = settings.RSS_TITLE
description = settings.RSS_DESCRIPTION
link = settings.RSS_LINK
feed_item_link_template = settings.RSS_LINK_TEMPLATE
feed_type = Atom1Feed

def __init__(self, **kwargs):
self.__dict__.update(kwargs)

def items(self):
return models.Announce.objects.exclude(expiration_time__lt=datetime.now()).order_by('-publication_time')

def item_title(self, item):
return item.title

def item_description(self, item):
return item.text

def item_link(self, item):
return self.feed_item_link_template.format(item.pk)

def item_pubdate(self, item):
return item.publication_time or item.mtime

atom = AtomView()
(10-10/11)