Projet

Général

Profil

Télécharger (3,77 ko) Statistiques
| Branche: | Tag: | Révision:

root / corbo / views.py @ 5e599191

1
from datetime import datetime
2

    
3
from django.conf import settings
4
from django.core.urlresolvers import reverse
5
from django.views.generic import CreateView, UpdateView, DeleteView, \
6
                                 ListView, TemplateView
7
from django.contrib.syndication.views import Feed
8
from django.utils.feedgenerator import Atom1Feed
9
from django.utils.http import urlencode
10

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

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

    
18
homepage = HomepageView.as_view()
19

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

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

    
30
add_announce = AnnounceCreateView.as_view()
31

    
32
class AnnounceEditView(UpdateView):
33
    model = models.Announce
34
    form_class = AnnounceForm
35

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

    
39
edit_announce = AnnounceEditView.as_view()
40

    
41
class AnnounceDeleteView(DeleteView):
42
    model = models.Announce
43

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

    
48
delete_announce = AnnounceDeleteView.as_view()
49

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

    
54
    def get_success_url(self):
55
        return reverse('manage')
56

    
57
    def form_valid(self, form):
58
        form.save()
59
        return super(CategoryCreateView, self).form_valid(form)
60

    
61
add_category = CategoryCreateView.as_view()
62

    
63
class CategoryEditView(UpdateView):
64
    form_class = CategoryForm
65
    model = models.Category
66

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

    
71
edit_category = CategoryEditView.as_view()
72

    
73
class CategoryDeleteView(DeleteView):
74
    model = models.Category
75

    
76
    def get_success_url(self):
77
        return reverse('manage')
78

    
79
delete_category = CategoryDeleteView.as_view()
80

    
81

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

    
87
    def get_queryset(self):
88
        queryset = super(ManageView, self).get_queryset()
89
        if self.request.GET.get('category'):
90
            queryset = queryset.filter(category__id=self.request.GET['category'])
91
        return queryset
92

    
93
    def get_context_data(self, **kwargs):
94
        context = super(ManageView, self).get_context_data(**kwargs)
95
        context['categories'] = models.Category.objects.all().order_by('-ctime')
96
        if self.request.GET.get('category'):
97
            try:
98
                context['category_id'] = int(self.request.GET['category'])
99
            except:
100
                pass
101
        return context
102

    
103
manage = ManageView.as_view()
104

    
105
class AtomView(Feed):
106
    title = settings.RSS_TITLE
107
    description = settings.RSS_DESCRIPTION
108
    link = settings.RSS_LINK
109
    feed_item_link_template = settings.RSS_LINK_TEMPLATE
110
    feed_type = Atom1Feed
111

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

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

    
118
    def item_title(self, item):
119
        return item.title
120

    
121
    def item_description(self, item):
122
        return item.text
123

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

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

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