Lots of changes to fix lots of bugs and add comments to blog
[sommitrealweird.git] / sommitrealweird / blog / views.py
1 from blog.models import BlogEntry, BlogSection
2 from django.http import Http404, HttpResponse
3 from django.template import RequestContext, loader
4 from django.core.paginator import Paginator
5 from django.conf import settings
6
7 def blog_index(request, section=None):
8     entries = BlogEntry.objects.all()
9     if section:
10         entries = entries.filter(sections__slug__exact=section)
11     entries = entries.order_by('-publish_date')
12     if entries:
13         paginate_by=20
14         paginator = Paginator(entries, paginate_by)
15         try:
16             page = int(request.GET.get('page', 1))
17         except ValueError:
18             page = 1
19         paginated_entries = paginator.page(page)
20         pages = paginator.page_range
21         t = loader.get_template("blog/blog_index.html")
22         c = RequestContext(request,
23             {
24                 "entries": paginated_entries.object_list,
25                 "title": settings.BLOG_TITLE,
26                 "page": page,
27                 "pages": pages,
28                 "paginated": 1,
29                 "has_more_than_one_page": (len(pages) > 1),
30                 "has_next": paginated_entries.has_next(),
31                 "has_prev": paginated_entries.has_previous(),
32                 "next": page + 1,
33                 "prev": page - 1
34             })
35         return HttpResponse(t.render(c))
36     else:
37         raise Http404
38
39 def blog_view(request, year=None, month=None, day=None, hour=None, minutes=None, section=None, slug=None):
40     # work out what we've got roughly
41     if year and month and day and slug:
42         # exact blog entry (woo!)
43             year = int(year)
44             month = int(month)
45             day = int(day)
46             try:
47                 blog_entry = BlogEntry.objects.get(publish_date__year=year, publish_date__month=month, publish_date__day=day, slug__exact=slug)
48                 template_name = "blog/single_entry_%s.html" %(blog_entry.format,)
49                 t = loader.get_template(template_name)
50                 c = RequestContext(request,
51                     {
52                         "entry": blog_entry,
53                         "publish_date": blog_entry.publish_date
54                     }
55                 )
56                 return HttpResponse(t.render(c))
57             except:
58                 raise Http404
59     else:
60         entries = BlogEntry.objects.all()
61         if year and month and day:
62             year = int(year)
63             month = int(month)
64             day = int(day)
65             entries = entries.filter(publish_date__year=year, publish_date__month=month, publish_date__day=day)
66         elif year and month:
67             year = int(year)
68             month = int(month)
69             entries = entries.filter(publish_date__year=year, publish_date__month=month)
70         elif year:
71             year = int(year)
72             entries = entries.filter(publish_date__year=year)
73         if entries:
74             entries = entries.order_by('-publish_date')
75             paginate_by=20
76             paginator = Paginator(entries, paginate_by)
77             try:
78                 page = int(request.GET.get('page', 1))
79             except ValueError:
80                 page = 1
81             paginated_entries = paginator.page(page)
82             pages = paginator.page_range
83             t = loader.get_template("blog/blog_index.html")
84             c = RequestContext(request,
85                 {
86                     "entries": paginated_entries.object_list,
87                     "title": settings.BLOG_TITLE,
88                     "page": page,
89                     "pages": pages,
90                     "paginated": 1,
91                     "has_more_than_one_page": (len(pages) > 1),
92                     "has_next": paginated_entries.has_next(),
93                     "has_prev": paginated_entries.has_previous(),
94                     "next": page + 1,
95                     "prev": page - 1
96                 })
97             return HttpResponse(t.render(c))
98         else:
99             raise Http404