Лента Django 1.1.1 отображает только последний элемент, в то время как есть много - PullRequest
0 голосов
/ 10 августа 2010

Я создал подкласс Feed для экспорта простой ленты новостей

#urls.py
from django.conf.urls.defaults import *

from litenewz.feeds import NewsFeed

feeds = {
    'news': NewsFeed,
}

urlpatterns = patterns(
    '',
    (r'^feeds/(?P<url>.*)/$',
     'django.contrib.syndication.views.feed',
     {'feed_dict': feeds}),
)

#feeds.py
from django.contrib.syndication.feeds import Feed

from litenewz.models import News

class NewsFeed(Feed):
    title = 'example news'
    link = 'http://example.net'
    description = 'Latest Newz from example.'

    item_author_name = '...'
    item_author_email = '...'
    item_author_link = 'http://example.net'

    def items(self):
        return News.objects.order_by('-time')[:15]

#models.py
from django.db import models
from django.utils.translation import ugettext as _

from datetime import datetime

class News(models.Model):
    class Meta:
        ordering = ('-time', )
        verbose_name = _('News')
        verbose_name_plural = _('News')

    title = models.CharField(
        _('Title'),
        max_length=512)
    time = models.DateTimeField(
        _('Date and time'),
        default=datetime.now
        )
    content = models.TextField(
        _('Content'))

    def __unicode__(self):
        return self.title

    @models.permalink
    def get_absolute_url(self):
        return ('home', (), {})

Как видите, метод Feed subclass 'items() возвращает первые 15 объектов в News.objects.order_by('-time'):

def items(self):
    return News.objects.order_by('-time')[:15]

Тем не менее, в ленте экспортируется только один элемент: hxxp: //www.sshguard.net/litenewz/feeds/news/

К сожалению, есть два объекта модели News:

>>> from litenewz.models import *
>>> News.objects.all()
[<News: Version 1.5 and timing>, <News: SSHGuard news>]

Любая помощь?

Я предпочитаю не переходить на Django 1.2, если только это не является строго необходимым для решения описанной проблемы.

Обновление: возвращенный RSS действительно содержит оба объекта, но RSS недействителен, и поэтому читатели, такие как Safari, обманываются:

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Похоже, что он недействителен, потому что вы не сгенерировали guid правильно:

Валидатор говорит:

Этот фид не проверяется.
строка 25, столбец 83: значения guid не должны дублироваться в ленте:
... )</author><guid>http://www.sshguard.net/</guid></item></channel></rss>

Причина в том, что ваш метод get_absolute_url в вашей модели News возвращает одно и то же для каждогоЭкземпляр News - есть ли у вас уникальные URL для каждого элемента News?Если это так, вы должны использовать это вместо:

def get_absolute_url(self):
    return ('home', (), {})
0 голосов
/ 10 августа 2010

Ошибка проверки, по-видимому, связана с элементом <guid> в каждом элементе вашего канала.Насколько я могу судить, это автоматически генерируется из метода get_absolute_url() модели, в вашем случае это модель новостей.Вы определили этот метод?Если да, то действительно ли он возвращает отдельный URL для каждого элемента?

...