1

我根据http://docs.djangoproject.com/en/dev/ref/contrib/syndication/设置了一个 Atom 提要,这意味着我有类似的东西

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

在我的urls.py和类似的

class MyFeed(Feed):
    ...

在我的feeds.py.

我想将此提要的流量重定向到 FeedBurner。我必须在 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 <function feed at 0x16a2430>', 'feed_dict': {'myfeed': <class 'feeds.MyFeed'>}}' 反向查找。

如何解决?

4

2 回答 2

2

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

不要使用反向重定向到不同的 URL,而是尝试从现有视图返回提要:

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')
于 2009-05-15T22:02:37.340 回答
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')
于 2012-01-06T13:47:13.693 回答