Domanda

Ho seguito questo tutorial per i feed RSS e ATOM di django e l'ho fatto funzionare.

Tuttavia, il server di sviluppo del test continua a fare in modo che il browser scarichi i feed come file invece che il browser lo rilevi come documento XML.

La mia esperienza con HTTP mi dice che manca un tipo MIME nell'intestazione Content-Type.

Come posso specificarlo in django?

È stato utile?

Soluzione 4

Suppongo che il problema fosse con il browser Camino su OS X, non con l'intestazione HTTP e il tipo mime.

Quando ho provato su Safari, ha funzionato.

Altri suggerimenti

C'è un commento nel codice sorgente di Everyblock su questo.

Definiscono una classe che sostituisce il tipo mime del feed Django standard in questo modo:

# 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

Stai utilizzando la vista disponibile per rss? Questo è ciò che ho nel mio urls.py - e non sto impostando nulla sui mimetipi:

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

dove publishing_feeds è qualcosa di simile

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}

Quando si crea un oggetto HTTPReponse è possibile specificare il tipo di contenuto:

HttpResponse(content_type='application/xml')

O qualunque sia il tipo di contenuto effettivamente.

Vedi http: // docs .djangoproject.com / it / dev / ref / richiesta-risposta / # django.http.HttpResponse .__ init__

Ho ancora riscontrato questo problema, 9 anni dopo con Firefox e Django 2.1.

Le soluzioni di cui sopra non hanno tagliato, quindi ho finito per usare questo:

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

L'uso di questa classe anziché Feed imposta il tipo mime su 'application / xml' come desiderato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top