Updated models, created separate files called utils and validators.
authorKriti Godey <kriti.godey@gmail.com>
Fri, 2 Jul 2010 09:17:39 +0000 (14:47 +0530)
committerKriti Godey <kriti.godey@gmail.com>
Fri, 2 Jul 2010 09:17:39 +0000 (14:47 +0530)
contrib/penfield/models.py
contrib/penfield/utils.py [new file with mode: 0644]
contrib/penfield/validators.py [new file with mode: 0644]

index 1117336..a5ba85a 100644 (file)
@@ -1,11 +1,12 @@
 from django.db import models
 from philo.models import Entity, MultiNode, Template, register_value_model
 from django.db import models
 from philo.models import Entity, MultiNode, Template, register_value_model
-from django.core.paginator import Paginator, InvalidPage, EmptyPage
 from django.contrib.auth.models import User
 from django.conf.urls.defaults import url, patterns
 from django.http import Http404, HttpResponse
 from django.template import RequestContext
 from datetime import datetime
 from django.contrib.auth.models import User
 from django.conf.urls.defaults import url, patterns
 from django.http import Http404, HttpResponse
 from django.template import RequestContext
 from datetime import datetime
+from utils import paginate
+from validators import validate_pagination_count
 
 
 class Tag(models.Model):
 
 
 class Tag(models.Model):
@@ -59,11 +60,9 @@ class BlogNode(MultiNode):
        blog = models.ForeignKey(Blog, related_name='nodes')
        
        index_template = models.ForeignKey(Template, related_name='blog_index_related')
        blog = models.ForeignKey(Blog, related_name='nodes')
        
        index_template = models.ForeignKey(Template, related_name='blog_index_related')
-       index_pages = models.IntegerField(help_text="Please enter a number between 0 and 9999.")
        archive_template = models.ForeignKey(Template, related_name='blog_archive_related')
        archive_template = models.ForeignKey(Template, related_name='blog_archive_related')
-       archive_pages = models.IntegerField(help_text="Please enter a number between 0 and 9999.")
        tag_template = models.ForeignKey(Template, related_name='blog_tag_related')
        tag_template = models.ForeignKey(Template, related_name='blog_tag_related')
-       tag_pages = models.IntegerField(help_text="Please enter a number between 0 and 9999.")
+       entries_per_page = models.IntegerField(blank=True, validators=[validate_pagination_count])
        entry_template = models.ForeignKey(Template, related_name='blog_entry_related')
        
        entry_permalink_style = models.CharField(max_length=1, choices=PERMALINK_STYLE_CHOICES)
        entry_template = models.ForeignKey(Template, related_name='blog_entry_related')
        
        entry_permalink_style = models.CharField(max_length=1, choices=PERMALINK_STYLE_CHOICES)
@@ -108,23 +107,12 @@ class BlogNode(MultiNode):
        
        def index_view(self, request):
                entries = self.blog.entries.order_by('-date')
        
        def index_view(self, request):
                entries = self.blog.entries.order_by('-date')
-               if self.index_pages != 0:
-                       paginator = Paginator(entries, self.index_pages)
-                       try:
-                               page = int(request.GET.get('page', '1'))
-                               entries = paginator.page(page).object_list
-                               page_number = paginator.page(page)
-                       except ValueError:
-                               page = 1
-                               entries = paginator.page(page).object_list
-                               page_number = paginator.page(page)
-                       try:
-                               entries = paginator.page(page).object_list
-                               page_number = paginator.page(page)
-                       except (EmptyPage, InvalidPage):
-                               entries = paginator.page(paginator.num_pages).object_list
-                               page_number = paginator.page(page)
-               return HttpResponse(self.index_template.django_template.render(RequestContext(request, {'blog': self.blog, 'entries': entries, 'page_number': page_number})), mimetype=self.index_template.mimetype)
+               if self.entries_per_page:
+                       page = paginate(request, entries, self.entries_per_page)
+                       entries = page.object_list
+               else:
+                       page = None
+               return HttpResponse(self.index_template.django_template.render(RequestContext(request, {'blog': self.blog, 'entries': entries, 'page': page})), mimetype=self.index_template.mimetype)
        
        def archive_view(self, request, year=None, month=None, day=None):
                entries = self.blog.entries.all()
        
        def archive_view(self, request, year=None, month=None, day=None):
                entries = self.blog.entries.all()
@@ -134,10 +122,21 @@ class BlogNode(MultiNode):
                        entries = entries.filter(date__month=month)
                if day:
                        entries = entries.filter(date__day=day)
                        entries = entries.filter(date__month=month)
                if day:
                        entries = entries.filter(date__day=day)
-               return HttpResponse(self.archive_template.django_template.render(RequestContext(request, {'blog': self.blog, 'year': year, 'month': month, 'day': day, 'entries': entries})), mimetype=self.archive_template.mimetype)
+               if self.entries_per_page:
+                       page = paginate(request, entries, self.entries_per_page)
+                       entries = page.object_list
+               else:
+                       page = None
+               return HttpResponse(self.archive_template.django_template.render(RequestContext(request, {'blog': self.blog, 'year': year, 'month': month, 'day': day, 'entries': entries, 'page': page})), mimetype=self.archive_template.mimetype)
        
        def tag_view(self, request, tag=None):
        
        def tag_view(self, request, tag=None):
-               # return HttpResponse(self.tag_template.django_template.render(RequestContext(request, {'blog': self.blog, 'tag': tag, 'entries': None})), mimetype=self.tag_template.mimetype)
+               entries = self.blog.entries.filter(tags__slug = tag)
+               if self.entries_per_page:
+                       page = paginate(request, entries, self.entries_per_page)
+                       entries = page.object_list
+               else:
+                       page = None
+               return HttpResponse(self.tag_template.django_template.render(RequestContext(request, {'blog': self.blog, 'tag': tag, 'entries': entries, 'page': page})), mimetype=self.tag_template.mimetype)
                raise Http404
        
        def entry_view(self, request, slug, year=None, month=None, day=None):
                raise Http404
        
        def entry_view(self, request, slug, year=None, month=None, day=None):
diff --git a/contrib/penfield/utils.py b/contrib/penfield/utils.py
new file mode 100644 (file)
index 0000000..5df800c
--- /dev/null
@@ -0,0 +1,20 @@
+from django.core.paginator import Paginator, InvalidPage, EmptyPage
+
+
+def paginate(request, entries, entries_per_page):
+       paginator = Paginator(entries, entries_per_page)
+       try:
+               page_number = int(request.GET.get('page', '1'))
+               entries = paginator.page(page_number).object_list
+               page = paginator.page(page_number)
+       except ValueError:
+               page_number = 1
+               entries = paginator.page(page_number).object_list
+               page = paginator.page(page_number)
+       try:
+               entries = paginator.page(page_number).object_list
+               page = paginator.page(page_number)
+       except (EmptyPage, InvalidPage):
+               entries = paginator.page(paginator.num_pages).object_list
+               page = paginator.page(page_number)
+       return page
\ No newline at end of file
diff --git a/contrib/penfield/validators.py b/contrib/penfield/validators.py
new file mode 100644 (file)
index 0000000..48eae06
--- /dev/null
@@ -0,0 +1,6 @@
+from django.core.exceptions import ValidationError
+
+
+def validate_pagination_count(x):
+       if x not in range(1, 10000):
+               raise ValidationError('Please enter an integer between 1 and 9999.')
\ No newline at end of file