我根据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'>
”找到。
如何解决这个问题?
答案 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')