2009-06-27 6 views
1

Ich folgte entlang this tutorial für Django RSS und ATOM-Feeds und ich habe es zur Arbeit.Django: RSS- und ATOM-Feeds Content-Type-Header?

Der Testentwicklungsserver lässt den Browser jedoch weiterhin die Feeds als Datei herunterladen, anstatt dass der Browser sie als XML-Dokument erkennt.

Meine Erfahrung mit HTTP teilt mir mit, dass es einen fehlenden Mime-Typ im Content-Type-Header gibt.

Wie definiere ich das in Django?

+0

Ich weiß, es ist ein MIME-Typ Parameter für render_to_response aber nicht für Djangos Syndication verwendet wird. –

+0

Django 'contrib.syndication' setzt die richtigen Inhaltstyp-Header für den Feed. Überprüfen Sie es noch einmal mit einem präziseren Werkzeug als einem rohen Browser. –

+0

Ich habe das gleiche Problem in Firefox. mimetype sollte application/atom + xml für ATOM sein. Wenn ich Seite mit GET/page/rss aufrufen, funktioniert es gut, aber auf POST FF versucht, die verdammte Datei herunterzuladen. – zinovii

Antwort

1

Ich denke, das Problem mit dem Camino-Browser war auf OS X, nicht mit dem HTTP-Header und Mime-Typ.

Als ich auf Safari versuchte, funktionierte es.

3

Sind Sie der Ansicht verfügbar für rss mit? Diese ist das, 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} 
9

Es gibt einen Kommentar im Everyblock-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