Umleiten von Django füttern zu Feedburner
-
22-08-2019 - |
Frage
Ich habe ein Atom-Feed entsprechend einzurichten http: // docs .djangoproject.com / en / dev / ref / contrib / Syndication / was bedeutet, ich habe so etwas wie
(r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': feeds})
in meiner urls.py
und so etwas wie
class MyFeed(Feed):
...
in meinem feeds.py
.
Ich möchte href="http://www.google.com/support/feedburner/bin/answer.py?hl=en&answer=78464" an umleiten von diesem Feed zum Feedburner. Ich habe dies in Django zu tun, da es keine mod_rewrite auf meinem Server ist.
Ich glaube, ich sollte urls.py
Eintrag
(r'^feeds/(?P<url>.*)/$', 'feeds.redirect', {'feed_dict': feeds})
und Ergänzung feeds.py
mit
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')
, aber es scheint nicht zu funktionieren, wie ich die folgende Fehlermeldung erhalten (Sie haben ==
zu ändern, um dies !=
zu sehen):
NoReverseMatch bei / Feeds / myfeed /
Umkehr für '
<function feed at 0x16a2430>
' mit Argumenten '()' und Keyword-Argumente '{' url ': u'myfeed', 'feed_dict': { 'myfeed':<class 'feeds.MyFeed'>
}}.‘Nicht gefunden
Wie kann dieses Problem gelöst werden?
Lösung
Das Problem hierbei ist, dass Sie die django.contrib.syndication.views.feed
Referenz von Ihrem urls.py entfernt.
Anstelle der Verwendung umgekehrt zu einer anderen URL umgeleitet wird, versuchen Sie einfach den Feed von Ihrer vorhandenen Ansicht Rückkehr:
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')
Andere Tipps
Nun, ich denke, es hilft jemand, der sich fragt, was ist der richtige Weg, es zu tun in 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')