为什么Django的Atom1Feed使用atom:updated而不是atom:published?
我在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的错误记录。
看起来这个问题的修复比较简单,所以你可以去尝试修复它!^_^