Перенаправить канал Django в FeedBurner - PullRequest
1 голос
/ 16 мая 2009

У меня настроена подача Atom в соответствии с http://docs.djangoproject.com/en/dev/ref/contrib/syndication/, что означает, что у меня есть что-то вроде

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

по моему urls.py и что-то вроде

class MyFeed(Feed):
    ...

по моему feeds.py.

Я бы хотел перенаправить трафик из этого канала в FeedBurner. Я должен сделать это в Django, так как на моем сервере нет mod_rewrite.


Полагаю, мне следует изменить urls.py запись на

(r'^feeds/(?P<url>.*)/$', 'feeds.redirect', {'feed_dict': feeds})

и дополнение feeds.py с

from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

def redirect(request, **kwargs):
    if request.META['HTTP_USER_AGENT'] == 'FeedBurner':
        view = 'django.contrib.syndication.views.feed'
        return HttpResponseRedirect(reverse(view, kwargs=kwargs))
    else:
        return HttpResponseRedirect('http://feeds2.feedburner.com/MyFeed')

, но, похоже, это не работает, так как я получаю следующую ошибку (вы должны изменить == на !=, чтобы увидеть это):

NoReverseMatch в / feeds / myfeed /

Обратное для '<function feed at 0x16a2430>' с аргументами '()' и аргументами ключевых слов '{' url ': u'myfeed', 'feed_dict': {'myfeed': <class 'feeds.MyFeed'>}} 'не найдено.

Как это можно решить?

Ответы [ 2 ]

2 голосов
/ 16 мая 2009

Проблема в том, что вы удалили ссылку django.contrib.syndication.views.feed из вашего urls.py.

Вместо того, чтобы использовать реверс для перенаправления на другой URL, попробуйте просто вернуть канал из существующего представления:

from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.contrib.syndication.views import feed

def redirect(request, **kwargs):
    if request.META['HTTP_USER_AGENT'].startswith('FeedBurner'):
        return feed(request, **kwargs)
    else:
        return HttpResponseRedirect('http://feeds2.feedburner.com/MyFeed')
0 голосов
/ 06 января 2012

Ну, думаю, это помогает кому-то, кто задается вопросом, как правильно сделать это в django 1.3 +

from django.http import HttpResponseRedirect
from feeds import MyFeed #your feed class, check https://docs.djangoproject.com/en/1.3/ref/contrib/syndication/

def burnedFeed(request, **kwargs):
    if request.META['HTTP_USER_AGENT'].startswith('FeedBurner'):
        feed = MyFeed()
        return feed(request)
    else:
        return HttpResponseRedirect('http://feeds2.feedburner.com/MyFeedName')
...