将Django重定向到FeedBurner

时间:2009-05-15 21:39:26

标签: django feedburner

我根据http://docs.djangoproject.com/en/dev/ref/contrib/syndication/设置了Atom Feed,这意味着我有类似

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

在我的urls.py和类似

class MyFeed(Feed):
    ...

在我的feeds.py

我想从FeedBurner的Feed中redirect traffic。我必须在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')

但它似乎不起作用,因为我收到以下错误(您必须将==更改为!=才能看到此内容):

  

/ feeds / myfeed /

的NoReverseMatch      

使用参数'()'和关键字参数'{'url':u'myfeed','feed_dict':{'myfeed':<function feed at 0x16a2430>}}'来反转“<class 'feeds.MyFeed'>”找到。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

此处的问题是您从urls.py中删除了django.contrib.syndication.views.feed引用。

请尝试从现有视图中返回Feed,而不是使用反向重定向到其他网址:

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

答案 1 :(得分:0)

嗯,我猜这有助于某人,他们想知道在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')