Pregunta

Seguí a lo largo de este tutorial para las fuentes RSS y ATOM de django y lo puse a trabajar.

Sin embargo, el servidor de desarrollo de prueba sigue haciendo que el navegador descargue los feeds como un archivo en lugar de que el navegador lo detecte como un documento xml.

Mi experiencia con HTTP me dice que falta un tipo mime en el encabezado Content-Type.

¿Cómo especifico eso en django?

¿Fue útil?

Solución 4

Supongo que el problema fue con el navegador Camino en OS X, no con el encabezado HTTP y el tipo mime.

Cuando probé en Safari, funcionó.

Otros consejos

Hay un comentario en el código fuente de Everyblock sobre esto.

Definen una clase que reemplaza el tipo mime del feed estándar de Django de la siguiente manera:

# 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

¿Está utilizando la vista disponible para rss? Esto es lo que tengo en mi urls.py, y no estoy configurando nada sobre los tipos mime:

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

donde updated_feeds es algo así como

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}

Cuando crea un objeto HTTPReponse, puede especificar su tipo de contenido:

HttpResponse(content_type='application/xml')

O cualquiera que sea el tipo de contenido en realidad.

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

Todavía encontré este problema, 9 años después con Firefox y Django 2.1.

Las soluciones anteriores no fueron suficientes, así que terminé usando esto:

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

El uso de esta clase en lugar de Feed establece el tipo mime en 'application / xml' como se desee.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top