Question

J'ai suivi ce tutoriel pour les flux RSS et ATOM de Django et je l’ai fait fonctionner.

Cependant, le serveur de développement de tests continue à faire en sorte que le navigateur télécharge les flux sous forme de fichier au lieu que le navigateur les détecte comme un document xml.

Mon expérience avec HTTP me dit qu'il existe un type mime manquant dans l'en-tête Content-Type.

Comment puis-je spécifier cela dans Django?

Était-ce utile?

La solution 4

Je suppose que le problème venait du navigateur Camino sous OS X, et non de l'en-tête HTTP et du type mime.

Lorsque j'ai essayé Safari, cela a fonctionné.

Autres conseils

Il y a un commentaire à ce sujet dans le code source Everyblock.

Ils définissent une classe qui remplace le type mime du flux Django standard comme suit:

# 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

Utilisez-vous la vue disponible pour les flux RSS? C’est ce que j’ai dans mon urls.py - et je ne mets rien au sujet des mimétypes:

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

où published_feeds est quelque chose comme

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}

Lorsque vous créez un objet HTTPReponse, vous pouvez spécifier son type de contenu:

HttpResponse(content_type='application/xml')

Ou quel que soit le type de contenu.

Voir http: // docs .djangoproject.com / fr / dev / ref / request-response / # django.http.HttpResponse .__ init__

J'ai toujours rencontré ce problème, 9 ans plus tard avec Firefox et Django 2.1.

Les solutions ci-dessus n'ont pas abouti, j'ai donc utilisé ceci:

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'utilisation de cette classe à la place de Feed définit le type mime sur 'application / xml' comme souhaité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top