2010-11-10 48 views
3

我在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嗎?我錯過了別的嗎?

+0

我會說這是django中的一個明確錯誤。當我說「我發佈時」時,我不希望我的翻譯人員說「上次我改變它」。我看到你已經[報道過](http://code.djangoproject.com/ticket/14656),所以我想時間會告訴你。 – eternicode 2010-11-11 03:01:47

+0

它看起來不像是一個「缺失」功能。在Django 1.2和1.3中,您可以向Feed中添加屬性。如果我在1.3中記得很清楚,只需要添加Feed類的item_extra_kwargs方法即可。 「return {'published':self.get_object()。created}」,這也可以用來創建播客訂閱源和其他類型的提供特殊項目或屬性的訂閱源 – 2011-02-14 22:53:16

+0

這是個好消息,但它沒有解決'atom:updated'元素被濫用,並且重要的'atom:published'元素根本不用於開箱即用。 – Thomas 2011-02-15 11:18:23

回答

0

你不會錯過任何東西。 Atom RFC是正確的,這是Django中的一個已知錯誤;請參閱this Django bug

它看起來像一個相對簡單的修復,所以隨時進入並修補它!^_^

+0

嗯......現在我已經閱讀了你的問題的評論,你認爲你是提交這個bug的人是什麼意思? 〜_〜 – pythonian4000 2011-02-18 07:38:06

+0

是的,那就是我;)它已經改變了「接受」的地位,所以它至少有一定程度的有效性。 – Thomas 2011-02-18 07:58:03

+0

那麼,這是第一個堆棧溢出的答案是 - 學習首先閱讀整個問題! =) – pythonian4000 2011-02-18 10:53:51

相關問題