Django: RSS и ATOM каналы заголовка Content-Type? - PullRequest
1 голос
/ 28 июня 2009

Я последовал этому руководству для RSS и ATOM-каналов django, и я заставил его работать.

Однако сервер разработки тестов продолжает заставлять браузер загружать каналы в виде файла, а не обнаруживать его как документ XML.

Мой опыт работы с HTTP говорит мне, что в заголовке Content-Type отсутствует тип mime.

Как мне указать это в django?

Ответы [ 5 ]

9 голосов
/ 04 июля 2009

В исходном коде Everyblock есть комментарий по этому поводу.

Они определяют класс, который заменяет MIME-тип стандартной ленты Django следующим образом:

# 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
3 голосов
/ 28 июня 2009

Используете ли вы доступный вид для RSS? Это то, что у меня есть в моем urls.py - и я не устанавливаю ничего для mimetypes:

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

где publ_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}
1 голос
/ 28 июня 2009

Думаю, проблема была в браузере Camino в OS X, а не в заголовке HTTP и типе mime.

Когда я попробовал Safari, он работал.

1 голос
/ 28 июня 2009

При создании объекта HTTPReponse вы можете указать его тип контента:

HttpResponse(content_type='application/xml')

Или какой бы тип контента на самом деле ни был.

См. http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponse.__init__

0 голосов
/ 25 ноября 2018

Я все еще сталкивался с этой проблемой, 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' как требуется.

...