为什么Django的Atom1Feed使用atom:updated而不是atom:published?

4 投票
1 回答
521 浏览
提问于 2025-04-16 06:50

我在Django中创建了一个Atom订阅源,使用了一个看起来像这样的类:

class AtomFeed(Feed):

    feed_type = feedgenerator.Atom1Feed

    # ...

    def item_pubdate(self, post):
        return datetime.datetime(post.date.year, post.date.month, post.date.day)

生成的某个项目的XML内容如下:

<entry>
  <title>..</title>
  <link href="..." rel="alternate"></link>
  <updated>2010-10-18T00:00:00+02:00</updated>
  <author><name>...</name></author>
  <id>...</id>
  <summary type="html">...</summary>
</entry>

这里需要注意的是,日期应该放在atom:updated这个元素里,而不是atom:published这个元素里。

根据RFC的说明,这似乎不是正确的用法:

“atom:updated”元素是一个日期,表示发布者认为重要的最近一次修改的时间。因此,并不是所有的修改都会导致atom:updated的值发生变化。

而“atom:published”元素是一个日期,表示与条目生命周期早期相关的某个事件的时间。

这不仅仅是个理论问题。例如,Google Reader似乎并不使用updated元素,而是使用它第一次看到这个项目出现的日期。因此,它在首次导入订阅源时,无法正确排序这些项目。

在Django中负责这个功能的代码是:

django/utils/feedgenerator.py:331

if item['pubdate'] is not None:
    handler.addQuickElement(u"updated", rfc3339_date(item['pubdate']).decode('utf-8'))

在这段代码中,似乎没有提到published元素。

这算不算是Django的一个bug?我是不是误解了Atom的RFC?还是说我遗漏了什么其他的东西?

1 个回答

1

你没有漏掉什么。Atom的请求是正确的,这个问题是Django里的一个已知错误;可以查看这个Django的错误记录

看起来这个问题的修复比较简单,所以你可以去尝试修复它!^_^

撰写回答