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

ändern
(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?

War es hilfreich?

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')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top