agdj/blog/models.py
changeset 416 5a586a8c2f8f
parent 388 2c8b20b9e628
child 451 88b49087ec1a
     1.1 --- a/agdj/blog/models.py	Tue Dec 02 09:19:46 2008 -0500
     1.2 +++ b/agdj/blog/models.py	Sun Feb 01 01:35:02 2009 -0500
     1.3 @@ -4,7 +4,7 @@
     1.4  from tagging.fields import TagField
     1.5  
     1.6  from agdj.blog.managers import PublicManager
     1.7 -from agdj.utils import cached_property
     1.8 +from agdj.utils import cached_property, dictproperty
     1.9  
    1.10  
    1.11  class Entry(models.Model):
    1.12 @@ -17,6 +17,17 @@
    1.13      pub_date = models.DateTimeField(auto_now_add=True)
    1.14      slug = models.CharField(max_length=64, unique=True)
    1.15      public = models.BooleanField()
    1.16 +    SLUG_ONLY = "slug-only"
    1.17 +    DATE_BASED = "date-based"
    1.18 +    URL_SCHEME_CHOICES = (
    1.19 +        (SLUG_ONLY, "Slug Only"),
    1.20 +        (DATE_BASED, "Date-based"),
    1.21 +        )
    1.22 +    feed_url_scheme = models.CharField(
    1.23 +        max_length=64, choices=URL_SCHEME_CHOICES,
    1.24 +        help_text="Does this post use the new date-based URL or the old "
    1.25 +        "slug-based one in feed URLs and GUIDs?",
    1.26 +        default=DATE_BASED)
    1.27  
    1.28      # This is a hack that even I don't understand
    1.29      text_tags = TagField(db_column="tags")
    1.30 @@ -45,6 +56,23 @@
    1.31  
    1.32          return super(Entry, self).save(*args, **kwargs)
    1.33  
    1.34 +    @dictproperty
    1.35 +    def urls(self, name):
    1.36 +        from django.core.urlresolvers import reverse
    1.37 +
    1.38 +        if name == "feed_url":
    1.39 +            if self.feed_url_scheme == self.DATE_BASED:
    1.40 +                return self.urls.view
    1.41 +            else:
    1.42 +                return reverse("redirect-to-date-url", args=[self.slug])
    1.43 +        elif name == "view":
    1.44 +                return reverse("view-blog-post",
    1.45 +                               args=[self.pub_date.year,
    1.46 +                                     self.pub_date.strftime("%b").lower(),
    1.47 +                                     self.pub_date.day,
    1.48 +                                     self.slug])
    1.49 +
    1.50 +
    1.51  
    1.52      @cached_property
    1.53      def rendered(self):