博客存档Django

时间:2013-03-04 22:25:40

标签: django date blogs archive

我正在尝试按照tutorial here创建基于年/月的博客存档。在尝试访问以下网址时:'www.example.com/blog/2013/feb'或'www.example.com/blog/2013',我使用上述方法获得了TypeError: 'str' object is not callable

我真的不在乎使用的方法是否与上面的教程相同,我只想让档案工作,这样如果用户访问:'example.com/blog/2013/'它会给出一个列表在2013年创建的对象。这是我到目前为止所拥有的:

的观点:

from django.views.generic import date_based

def post_archive_year(request, year):
    return date_based.archive_year(
        request,
        year=year,
        date_field='date',
        queryset=Blog.objects.date(),
    )

def post_archive_month(request, year, month):
    return date_based.archive_month(
        request,
        year=year,
        month=month,
        date_field='date',
        queryset=Blog.objects.date(),
    )

模型:

class Blog(models.Model):
    name = models.CharField(max_length=50)
    date = models.DateTimeField()
    slug = models.SlugField()
    article = models.TextField()
    tags = TaggableManager()
    def __unicode__(self):
        return self.name

    @permalink
    def get_absolute_url(self):
        return ('blog_detail', None, {
            'year': self.date.year,
            'month': self.date.strftime('%b').lower(),
            'slug': self.slug
        })

网址:

url(r'^blog/(?P<year>\d{4})/$', view='post_archive_year', name='post_archive_year'),
url(r'^blog/(?P<year>\d{4})/(?P<month>\w{3})/$', view='post_archive_month', name='post_archive_month'),

感谢任何可以帮助我创建基于日期的存档的想法。感谢您的投入。

1 个答案:

答案 0 :(得分:0)

__unicode__方法需要返回一个unicode对象。

您将返回self.name CharField。只有字符串或缓冲区协议对象才能自动转换为unicode对象。

试试这个:

def __unicode__(self):
    return u'%s' % self.name

内置Python类型的另一个选项,或任何具有自己的__unicode__方法的用户定义类:

def __unicode__(self):
    return unicode(self.name)