1

我按照django 的 RSS 和 ATOM 提要的本教程进行操作,并让它工作。

但是,测试开发服务器不断让浏览器将提要下载为文件,而不是浏览器将其检测为 xml 文档。

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

我如何在 django 中指定它?

4

5 回答 5

10

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

他们定义了一个类来替换标准 Django 提要的 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
于 2009-07-03T22:21:48.850 回答
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}
于 2009-06-28T01:00:23.707 回答
1

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

HttpResponse(content_type='application/xml')

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

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

于 2009-06-27T23:52:53.640 回答
1

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

当我在 Safari 上尝试时,它起作用了。

于 2009-06-28T11:55:41.877 回答
1

在 9 年后使用 Firefox 和 Django 2.1 时,我仍然遇到了这个问题。

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

class XMLFeed(Feed):
    def get_feed(self, obj, request):
        feedgen = super().get_feed(obj, request)
        feedgen.content_type = 'application/rss+xml; charset=utf-8'  # New standard
        # feedgen.content_type = 'application/xml; charset=utf-8'  # Old standard, left here for reference
        return feedgen

使用此类而不是根据需要Feed将 mime-type 设置为“application/rss+xml”。

更新

我注意到 mime 类型的“application/xml”已经过时,应该使用“application/rss+xml”。上面的代码已相应更新,但尚未经过测试。

于 2018-11-24T21:58:59.603 回答