Project

General

Profile

Download (3.13 KB) Statistics
| Branch: | Tag: | Revision:

root / corbo / views.py @ b94039e0

1
from datetime import datetime
2

    
3
from django.conf import settings
4
from django.views.generic import CreateView, UpdateView, DeleteView, \
5
                                 ListView, TemplateView
6
from django.views.generic.list import MultipleObjectMixin
7
from django.contrib.syndication.views import Feed
8
from django.utils.feedgenerator import Atom1Feed
9

    
10
import models
11
from .forms import AnnounceForm, CategoryForm
12

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

    
17
homepage = HomepageView.as_view()
18

    
19
class AnnounceCreateView(CreateView):
20
    form_class = AnnounceForm
21
    template_name = 'corbo/announce_form.html'
22
    success_url = '..'
23

    
24
add_announce = AnnounceCreateView.as_view()
25

    
26
class AnnounceEditView(UpdateView):
27
    model = models.Announce
28
    form_class = AnnounceForm
29
    success_url = '../..'
30

    
31
edit_announce = AnnounceEditView.as_view()
32

    
33
class AnnounceDeleteView(DeleteView):
34
    success_url = '../..'
35
    model = models.Announce
36

    
37
delete_announce = AnnounceDeleteView.as_view()
38

    
39
class CategoryCreateView(CreateView):
40
    form_class = CategoryForm
41
    template_name = 'corbo/category_form.html'
42
    success_url = '..'
43

    
44
    def form_valid(self, form):
45
        form.save()
46
        return super(CategoryCreateView, self).form_valid(form)
47

    
48
add_category = CategoryCreateView.as_view()
49

    
50
class CategoryEditView(UpdateView):
51
    form_class = CategoryForm
52
    model = models.Category
53
    success_url = '../..'
54

    
55
edit_category = CategoryEditView.as_view()
56

    
57
class DeleteView(DeleteView):
58
    model = models.Category
59
    success_url = '../..'
60

    
61
delete_category = DeleteView.as_view()
62

    
63

    
64
class ManageView(ListView, MultipleObjectMixin):
65
    paginate_by = settings.ANNOUNCES_PER_PAGE
66
    template_name = 'corbo/manage.html'
67
    model = models.Announce
68

    
69
    def get_queryset(self):
70
        queryset = super(ManageView, self).get_queryset()
71
        if self.request.GET.get('category'):
72
            queryset = queryset.filter(category__id=self.request.GET['category'])
73
        return queryset
74

    
75
    def get_context_data(self, **kwargs):
76
        context = super(ManageView, self).get_context_data(**kwargs)
77
        context['categories'] = models.Category.objects.all().order_by('-ctime')
78
        if self.request.GET.get('category'):
79
            try:
80
                context['category_id'] = int(self.request.GET['category'])
81
            except:
82
                pass
83
        return context
84

    
85
manage = ManageView.as_view()
86

    
87
class AtomView(Feed):
88
    title = settings.RSS_TITLE
89
    description = settings.RSS_DESCRIPTION
90
    link = settings.RSS_LINK
91
    feed_item_link_template = settings.RSS_LINK_TEMPLATE
92
    feed_type = Atom1Feed
93

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

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

    
100
    def item_title(self, item):
101
        return item.title
102

    
103
    def item_description(self, item):
104
        return item.text
105

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

    
109
    def item_pubdate(self, item):
110
        return item.publication_time or item.modification_time
111

    
112
atom = AtomView()
(9-9/10)