我在Django使用一個類,看起來像這樣由一個Atom提要:爲什麼Django Atom1Feed使用atom:updated代替原子:published?
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清楚地表明,我認爲這不是預期的用法:
的「原子:更新」元素是指示最近的時間瞬間日期構建體時的條目或飼料中被修改出版商認爲重要的一種方式。因此,並非所有修改都必然會導致更改的原子:更新的值。
鑑於:
的「原子:出版的」元素是指示在與所述條目的生命週期的早期事件相關聯的時間的即時一個日期構建體。
這不僅僅是一個理論問題。例如,Google閱讀器似乎沒有使用updated
元素,並使用它第一次看到該項目出現的日期。因此,它不會在首次導入Feed時正確訂購商品。
在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中的錯誤?我誤解了Atom RFC嗎?我錯過了別的嗎?
我會說這是django中的一個明確錯誤。當我說「我發佈時」時,我不希望我的翻譯人員說「上次我改變它」。我看到你已經[報道過](http://code.djangoproject.com/ticket/14656),所以我想時間會告訴你。 – eternicode 2010-11-11 03:01:47
它看起來不像是一個「缺失」功能。在Django 1.2和1.3中,您可以向Feed中添加屬性。如果我在1.3中記得很清楚,只需要添加Feed類的item_extra_kwargs方法即可。 「return {'published':self.get_object()。created}」,這也可以用來創建播客訂閱源和其他類型的提供特殊項目或屬性的訂閱源 – 2011-02-14 22:53:16
這是個好消息,但它沒有解決'atom:updated'元素被濫用,並且重要的'atom:published'元素根本不用於開箱即用。 – Thomas 2011-02-15 11:18:23