Django:RSS和ATOM提供Content-Type标题?

时间:2009-06-27 23:08:49

标签: django django-urls django-rss django-syndication

我跟着this tutorial跟踪了django的RSS和ATOM提要,然后我开始工作了。

然而,测试开发服务器不断让浏览器将订阅源作为文件下载,而不是浏览器将其检测为xml文档。

我使用HTTP的经验告诉我,Content-Type标头中缺少mime类型。

如何在django中指定?

5 个答案:

答案 0 :(得分:9)

Everyblock源代码中有关于此的注释。

他们定义了一个替换标准Django feed的mime类型的类,如下所示:

# RSS feeds powered by Django's syndication framework use MIME type
# 'application/rss+xml'. That's unacceptable to us, because that MIME type
# prompts users to download the feed in some browsers, which is confusing.
# Here, we set the MIME type so that it doesn't do that prompt.
class CorrectMimeTypeFeed(Rss201rev2Feed):
    mime_type = 'application/xml'

# This is a django.contrib.syndication.feeds.Feed subclass whose feed_type
# is set to our preferred MIME type.
class EbpubFeed(Feed):
    feed_type = CorrectMimeTypeFeed

答案 1 :(得分:3)

您是否使用rss的可用视图? 这就是我在urls.py中的内容 - 而且我没有设置任何关于mimetypes的内容:

urlpatterns += patterns('',
    (r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': published_feeds}, 'view_name')`,
)

其中published_feeds类似于

class LatestNewsFeed(Feed):
    def get_object(self, bits):
      pass

    def title(self, obj):
      return "Feed title"

    def link(self, obj):
      if not obj:
        return FeedDoesNotExist
      return slugify(obj[0])

    def description(self, obj):
      return "Feed description"

    def items(self, obj):
      return obj[1]

published_feeds = {'mlist': LatestNewsFeed}

答案 2 :(得分:1)

创建HTTPResponse对象时,您可以指定其内容类型:

HttpResponse(content_type='application/xml')

或者实际上是什么内容类型。

请参阅http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponse.__init__

答案 3 :(得分:1)

我猜问题是OS X上的Camino浏览器,而不是HTTP头和mime类型。

当我尝试Safari时,它有效。

答案 4 :(得分:0)

9年后的Firefox和Django 2.1,我仍然遇到了这个问题。

上面的解决方案没有解决问题,所以我最终使用了它:

class XMLFeed(Feed):
    def get_feed(self, obj, request):
        feedgen = super().get_feed(obj, request)
        feedgen.content_type = 'application/xml; charset=utf-8'
        return feedgen

使用此类代替Feed可以根据需要将mime类型设置为'application / xml'。