Skip to content

Commit

Permalink
Created an EntryManager class that provides helper methods for …
Browse files Browse the repository at this point in the history
…filtering querysets.

 * Tags with zero associated posts are now filtered out of the {% show_tags %} templatetag.
 * Made source code more consistent.


git-svn-id: file:///Users/brian/Backups/S3/backups/Wednesday/brian/svn/djog/trunk@81 95ab7de8-677b-4562-a266-b8acc9dd993c
  • Loading branch information
brosner committed Dec 14, 2007
1 parent 83e7a70 commit 5c52382
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 22 deletions.
15 changes: 15 additions & 0 deletions djog/managers.py
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,15 @@

from django.db import models

class EntryManager(models.Manager):
def of_type(self, type_):
"""
Returns a queryset filtering the entries to the given type.
"""
return self.filter(entry_type=type_)

def in_month(self, month):
"""
Returns a queryset filtering the entries to the given month.
"""
return self.filter(pub_date__month=month)
13 changes: 11 additions & 2 deletions djog/models.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from django.contrib.sites.managers import CurrentSiteManager from django.contrib.sites.managers import CurrentSiteManager


from djog.managers import EntryManager

class Blog(models.Model): class Blog(models.Model):
site = models.ForeignKey(Site) site = models.ForeignKey(Site)
title = models.CharField(_('Title'), max_length=100) title = models.CharField(_('Title'), max_length=100)
Expand Down Expand Up @@ -45,6 +47,8 @@ class Entry(models.Model):
help_text=_('Select what type of Entry this is, currently there are regular blog posts, and pages(such as an About page, or a contact page).'), help_text=_('Select what type of Entry this is, currently there are regular blog posts, and pages(such as an About page, or a contact page).'),
radio_admin=True, default=TYPE_POST) radio_admin=True, default=TYPE_POST)


objects = EntryManager()

def __unicode__(self): def __unicode__(self):
return self.title return self.title


Expand Down Expand Up @@ -90,8 +94,13 @@ def __unicode__(self):
class Admin: class Admin:
pass pass


def num_stories(self): def _get_num_stories(self):
return Entry.objects.filter(tags__tag=unicode(self)).count() if not hasattr(self, "_num_stories"):
self._num_stories = Entry.objects.filter(
tags__tag=unicode(self)
).count()
return self._num_stories
num_stories = property(_get_num_stories)


def get_absolute_url(self): def get_absolute_url(self):
return urlresolvers.reverse('djog_entries_by_tag', return urlresolvers.reverse('djog_entries_by_tag',
Expand Down
12 changes: 6 additions & 6 deletions djog/sites.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ def add_feed(self, url, feed_class):


def archive_index(self, request, **kwargs): def archive_index(self, request, **kwargs):
defaults = dict( defaults = dict(
queryset = self.get_blog().entry_set.filter(entry_type=Entry.TYPE_POST), queryset = self.get_blog().entry_set.of_type(Entry.TYPE_POST),
date_field = 'pub_date', date_field = 'pub_date',
) )
defaults.update(kwargs) defaults.update(kwargs)
return archive_index(request, **defaults) return archive_index(request, **defaults)


def archive_year(self, request, **kwargs): def archive_year(self, request, **kwargs):
defaults = dict( defaults = dict(
queryset = self.get_blog().entry_set.filter(entry_type=Entry.TYPE_POST), queryset = self.get_blog().entry_set.of_type(Entry.TYPE_POST),
date_field = 'pub_date', date_field = 'pub_date',
template_name = 'djog/archive_year.html', template_name = 'djog/archive_year.html',
) )
Expand All @@ -43,7 +43,7 @@ def archive_year(self, request, **kwargs):


def archive_month(self, request, **kwargs): def archive_month(self, request, **kwargs):
defaults = dict( defaults = dict(
queryset = self.get_blog().entry_set.filter(entry_type=Entry.TYPE_POST), queryset = self.get_blog().entry_set.of_type(Entry.TYPE_POST),
date_field = 'pub_date', date_field = 'pub_date',
template_name = 'djog/archive_month.html', template_name = 'djog/archive_month.html',
) )
Expand All @@ -52,7 +52,7 @@ def archive_month(self, request, **kwargs):


def archive_day(self, request, **kwargs): def archive_day(self, request, **kwargs):
defaults = dict( defaults = dict(
queryset = self.get_blog().entry_set.filter(entry_type=Entry.TYPE_POST), queryset = self.get_blog().entry_set.of_type(Entry.TYPE_POST),
date_field = 'pub_date', date_field = 'pub_date',
template_name = 'djog/archive_day.html', template_name = 'djog/archive_day.html',
) )
Expand All @@ -61,7 +61,7 @@ def archive_day(self, request, **kwargs):


def post(self, request, **kwargs): def post(self, request, **kwargs):
defaults = dict( defaults = dict(
queryset = self.get_blog().entry_set.filter(entry_type=Entry.TYPE_POST), queryset = self.get_blog().entry_set.of_type(Entry.TYPE_POST),
date_field = 'pub_date', date_field = 'pub_date',
) )
defaults.update(kwargs) defaults.update(kwargs)
Expand All @@ -82,7 +82,7 @@ def post(self, request, **kwargs):


def page(self, request, **kwargs): def page(self, request, **kwargs):
defaults = dict( defaults = dict(
queryset = self.get_blog().entry_set.filter(entry_type=Entry.TYPE_PAGE), queryset = self.get_blog().entry_set.of_type(Entry.TYPE_PAGE),
slug_field = 'slug', slug_field = 'slug',
template_name = 'djog/entry_detail.html', template_name = 'djog/entry_detail.html',
) )
Expand Down
30 changes: 16 additions & 14 deletions djog/templatetags/djog_utils.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -9,24 +9,26 @@ def show_entry(entry):
register.inclusion_tag("entry.html")(show_entry) register.inclusion_tag("entry.html")(show_entry)


def show_tags(): def show_tags():
tags = Tag.objects.all().order_by('tag') tags = Tag.objects.all().order_by("tag")
return {'tags': tags} return {"tags": [tag for tag in tags if tag.num_stories > 0]}
register.inclusion_tag('tags.html')(show_tags) register.inclusion_tag("tags.html")(show_tags)


def show_archive(): def show_archive():
months = Entry.objects.filter(entry_type=Entry.TYPE_POST).dates('pub_date', "month") entries = Entry.objects.of_type(Entry.TYPE_POST)
counts = [] dates = []
for month in months: for date in entries._clone().dates("pub_date", "month"):
count = Entry.objects.filter(entry_type=Entry.TYPE_POST, pub_date__month=month.month).count() dates.append(
counts.append((month, count)) (date, (entries & Entry.objects.in_month(date.month)).count())
return {'counts': counts} )
register.inclusion_tag('monthly.html')(show_archive) # TODO: rename counts to dates. counts is not very descriptive.
return {"counts": dates}
register.inclusion_tag("monthly.html")(show_archive)


def show_pages(): def show_pages():
Pages = Entry.objects.filter(entry_type=Entry.TYPE_PAGE) pages = Entry.objects.of_type(Entry.TYPE_PAGE)
return {'pages': Pages} return {"pages": pages}
register.inclusion_tag('pages.html')(show_pages) register.inclusion_tag("pages.html")(show_pages)


def searchify(term): def searchify(term):
return "search/%s" % term return "search/%s" % term
register.filter('searchify', searchify) register.filter("searchify", searchify)

0 comments on commit 5c52382

Please sign in to comment.