Получить параметр запроса в синдикации django?

Вот URL, содержащий хэш для суперсекретного канала:

http://127.0.0.1:8000/something/feed/12e8e59187c328fbe5c48452babf769c/

Я пытаюсь захватить и отправить переменную '12e8e59187c328fbe5c48452babf769c' который feed_hash (действует как пуля для извлечения конкретной записи)

Основываясь на примере в django-syndication, я создал этот простой класс в feeds.py

class SomeFeed(Feed):
    title = 'feed title '+request.feed_hash #just testing
    link = "/feed/"
    description = "Feed description"

    def items(self):
        return Item.objects.order_by('-published')[:5]

    def item_title(self, item):
        return item.title

    def item_description(self, item):
        return item.content

    # item_link is only needed if NewsItem has no get_absolute_url method.
    def item_link(self, item):
        return 'link'

Поэтому мне интересно, как бы я изменил это, чтобы получить модель в соответствии с хешем?

В настоящее время я не могу получить доступ к 12e8e59187c328fbe5c48452babf769c в любом случае. Как я могу получить доступ к этому и - стандартным способом Django - создать ленту из извлеченной переменной (которая представляет собой слаг, обращающийся к связи "многие ко многим").

1 ответ

Прежде всего, установите свой параметр в диспетчере URL-адресов django. Что-то вроде:

url(r'^feed/(?P<pid>\w+)/$', SomeFeed())

Теперь получите и верните хеш из URL с помощью метода get_object в вашем классе фидов. В конце концов, получите хеш как второй параметр вашего метода items().

class SomeFeed(Feed):
    def get_object(self, request, pid):
        # expect pid as your second parameter on method items()
        return pid 

        # you can also load an instance here and get it the same way on items()
        return SomeFeed.objects.get(pk=pid)

    def items(self, feed):
        # filter your feed here based on the pid or whatever you need..
        return Item.objects.filter(feed=feed).order_by('-published')[:5]
Другие вопросы по тегам