Pergunta

Eu tenho um feed Atom configurado de acordo com a http: // docs .djangoproject.com / en / dev / ref / contrib / distribuição / que significa que tenho algo como

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

Na minha urls.py e algo como

class MyFeed(Feed):
    ...

Na minha feeds.py.

Eu gostaria de tráfego redirecionamento a partir desta alimentação para o FeedBurner. Eu tenho que fazer isso no Django, como não há mod_rewrite no meu servidor.


Eu acho que deveria mudar entrada urls.py para

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

e feeds.py suplemento com

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')

mas não parece trabalho como eu recebo o seguinte erro (você tem que mudar == para != para ver este):

NoReverseMatch at / feeds / myfeed /

reverso para '<function feed at 0x16a2430>' com os argumentos '()' e os argumentos de palavra-chave '{' url ': u'myfeed', 'feed_dict': { 'myfeed': <class 'feeds.MyFeed'>}}.' Não encontrada

Como isso pode ser resolvido?

Foi útil?

Solução

O problema aqui é que você removeu a referência django.contrib.syndication.views.feed do seu urls.py.

Em vez de usar reversa para redirecionar para uma URL diferente, tente apenas retornar o feed do seu modo de exibição existente:

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')

Outras dicas

Bem, eu acho que isso ajuda alguém, que se pergunta o que é a maneira correta de fazê-lo no 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')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top