【问题标题】:Blog Archive Django博客存档 Django
【发布时间】:2013-03-04 22:25:39
【问题描述】:

我正在尝试关注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'),

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

【问题讨论】:

  • Blog.objects.date() 看起来不对,你想在这里做什么?我想你想要Blog.objects.all() 或类似的...
  • 因为你的绝对 url 需要年、月和 slug,而你当前的 url 只定义了年值
  • 感谢您的想法@mVChr,但尝试Blog.objects.all() 也会得到相同的TypeError。我正在尝试Blog.objects.date(),因为它遵循此处描述的模式(我的模型字段称为“日期”,他的字段称为“已发布”):quxisto.com/2012/mar/7/a-typical-date-based-archive
  • 感谢您的评论@catherine。但是,我没有在有错误的模板中使用get_absolute_url,所以我认为这不是我的TypeError 的来源。您还有其他我可能忽略的想法吗?

标签: django date blogs archive


【解决方案1】:

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

您正在返回self.name,这是一个CharField。只有字符串或缓冲区协议对象可以自动转换为 unicode 对象。

试试这个:

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

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

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

【讨论】:

    猜你喜欢
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2017-07-03
    • 1970-01-01
    相关资源
    最近更新 更多