Frage

Ich folgte entlang dieses Tutorial für Djangos RSS und ATOM-Feeds und ich habe es zu arbeiten.

Doch die Testentwicklungsserver hält macht der Browser die Feeds als Datei anstelle des Browsers laden Sie es als XML-Dokument zu erkennen.

Meine Erfahrung mit HTTP sagt mir, dass es ein fehlender MIME-Typ in dem Content-Type-Header ist.

Wie gebe ich, dass in django?

War es hilfreich?

Lösung 4

Ich denke, das Problem mit dem Camino-Browser auf O X war, nicht mit den HTTP-Header und MIME-Typ.

Wenn ich auf Safari versucht, es hat funktioniert.

Andere Tipps

Es ist ein Kommentar in der Every Quellcode dazu.

Sie definieren eine Klasse, die den MIME-Typen des Standard Django füttern wie so ersetzt:

# 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

Sind Sie mit der verfügbaren Ansicht für rss? Dies ist, was ich in meinem urls.py habe - und ich bin Einstellung nichts über MIME-Typ:

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

wo published_feeds ist so etwas wie

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}

Wenn Sie erstellen ein HTTPReponse Objekt, das Sie seinen Inhaltstyp angeben:

HttpResponse(content_type='application/xml')

oder was auch immer der Content-Typ tatsächlich ist.

Siehe http: // docs .djangoproject.com / en / dev / ref / Request-Response / # django.http.HttpResponse .__ init__

ich immer noch auf dieses Problem gestoßen, 9 Jahre später mit Firefox und Django 2.1.

Die Lösungen, die oben es nicht geschnitten, so landete ich dies mit bis:

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

Mit dieser Klasse statt Feed setzt den MIME-Typ auf 'application / xml' wie gewünscht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top