from philo.models import Tag, Titled, Entity, MultiView, Page, register_value_model
from philo.exceptions import ViewCanNotProvideSubpath
from django.conf.urls.defaults import url, patterns
+from django.core.paginator import EmptyPage
from django.core.urlresolvers import reverse
from django.http import Http404, HttpResponse
from datetime import datetime
def entry_tags(self):
""" Returns a QuerySet of Tags that are used on any entries in this blog. """
return Tag.objects.filter(blogentries__blog=self).distinct()
+
+ @property
+ def entry_dates(self):
+ dates = {'year': self.entries.dates('date', 'year', order='DESC'), 'month': self.entries.dates('date', 'month', order='DESC'), 'day': self.entries.dates('date', 'day', order='DESC')}
+ return dates
register_value_model(Blog)
elif isinstance(obj, Tag):
if obj in self.blog.entry_tags:
return reverse(self.tag_view, urlconf=self, kwargs={'tag_slugs': obj.slug})
+ elif isinstance(obj, (str, unicode)):
+ split_obj = obj.split(':')
+ if len(split_obj) > 1:
+ entry_archive_view_args = {}
+ if split_obj[0].lower() == 'archives':
+ entry_archive_view_args.update({'year': str(int(split_obj[1])).zfill(4)})
+ if len(split_obj) > 2:
+ entry_archive_view_args.update({'month': str(int(split_obj[2])).zfill(2)})
+ if len(split_obj) > 3:
+ entry_archive_view_args.update({'day': str(int(split_obj[3])).zfill(2)})
+ return reverse(self.entry_archive_view, urlconf=self, kwargs=entry_archive_view_args)
raise ViewCanNotProvideSubpath
@property
)
return base_patterns + entry_patterns
+ def paginate(self, objects, page_number):
+ try:
+ return paginate(objects, self.entries_per_page, page_number)
+ except EmptyPage:
+ raise Http404
+
def index_view(self, request, node=None, extra_context=None):
- entries = self.blog.entries.all()
- if self.entries_per_page:
- paginated_page = paginate(request, entries, self.entries_per_page)
- entries = paginated_page.object_list
- else:
- paginated_page = None
+ paginated_page, entries = self.paginate(self.blog.entries.all(), request.GET.get('page', 1))
context = {}
context.update(extra_context or {})
context.update({'blog': self.blog, 'entries': entries, 'paginated_page': paginated_page})
entries = entries.filter(date__month=month)
if day:
entries = entries.filter(date__day=day)
- if self.entries_per_page:
- paginated_page = paginate(request, entries, self.entries_per_page)
- entries = paginated_page.object_list
- else:
- paginated_page = None
+
+ paginated_page, entries = self.paginate(entries, request.GET.get('page', 1))
context = {}
context.update(extra_context or {})
context.update({'blog': self.blog, 'year': year, 'month': month, 'day': day, 'entries': entries, 'paginated_page': paginated_page})
if entries.count() <= 0:
raise Http404
- if self.entries_per_page:
- paginated_page = paginate(request, entries, self.entries_per_page)
- entries = paginated_page.object_list
- else:
- paginated_page = None
+ paginated_page, entries = self.paginate(entries, request.GET.get('page', 1))
context = {}
context.update(extra_context or {})
context.update({'blog': self.blog, 'tags': tags, 'entries': entries, 'paginated_page': paginated_page})
pass
+register_value_model(Newsletter)
+
+
class NewsletterArticle(Entity, Titled):
newsletter = models.ForeignKey(Newsletter, related_name='articles')
authors = models.ManyToManyField(getattr(settings, 'PHILO_PERSON_MODULE', 'auth.User'), related_name='newsletterarticles')
full_text = models.TextField()
class Meta:
+ get_latest_by = 'date'
ordering = ['-date']
unique_together = (('newsletter', 'slug'),)
class NewsletterIssue(Entity, Titled):
newsletter = models.ForeignKey(Newsletter, related_name='issues')
number = models.PositiveIntegerField()
- articles = models.ManyToManyField(NewsletterArticle)
+ articles = models.ManyToManyField(NewsletterArticle, related_name='issues')
class Meta:
ordering = ['-number']
unique_together = (('newsletter', 'number'),)
+register_value_model(NewsletterIssue)
+
+
class NewsletterView(MultiView):
ARTICLE_PERMALINK_STYLE_CHOICES = (
('D', 'Year, month, and day'),