Redireccionamento Django alimentar para FeedBurner
-
22-08-2019 - |
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?
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')