Fixed File unicode method and added pagination to the BlogNode's index template....
[philo.git] / contrib / penfield / models.py
index 12a19f8..1117336 100644 (file)
@@ -1,5 +1,6 @@
 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.contrib.auth.models import User
 from django.conf.urls.defaults import url, patterns
 from django.http import Http404, HttpResponse
@@ -7,6 +8,14 @@ from django.template import RequestContext
 from datetime import datetime
 
 
 from datetime import datetime
 
 
+class Tag(models.Model):
+       name = models.CharField(max_length=250)
+       slug = models.SlugField()
+       
+       def __unicode__(self):
+               return self.name
+
+
 class Titled(models.Model):
        title = models.CharField(max_length=255)
        slug = models.SlugField()
 class Titled(models.Model):
        title = models.CharField(max_length=255)
        slug = models.SlugField()
@@ -28,9 +37,10 @@ class BlogEntry(Entity, Titled):
        date = models.DateTimeField(default=datetime.now)
        content = models.TextField()
        excerpt = models.TextField()
        date = models.DateTimeField(default=datetime.now)
        content = models.TextField()
        excerpt = models.TextField()
+       tags = models.ManyToManyField(Tag)
        
        class Meta:
        
        class Meta:
-               ordering = ['date']
+               ordering = ['-date']
                verbose_name_plural = "Blog Entries"
 
 
                verbose_name_plural = "Blog Entries"
 
 
@@ -49,8 +59,11 @@ 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.")
        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)
@@ -94,7 +107,24 @@ class BlogNode(MultiNode):
                return base_patterns + entry_patterns
        
        def index_view(self, request):
                return base_patterns + entry_patterns
        
        def index_view(self, request):
-               return HttpResponse(self.index_template.django_template.render(RequestContext(request, {'blog': self.blog})), mimetype=self.index_template.mimetype)
+               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)
        
        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()