Pergunta

Eu segui ao longo neste tutorial para Django feeds RSS e Atom e eu tenho que trabalhar.

No entanto, o servidor de desenvolvimento de teste continua a fazer o download do navegador os feeds como um arquivo em vez do navegador detectá-lo como um documento XML.

A minha experiência com HTTP me diz que há um tipo mime faltando no cabeçalho Content-Type.

Como posso especificar que no Django?

Foi útil?

Solução 4

Eu acho que o problema era com o navegador Camino no OS X, não com o cabeçalho HTTP e tipo mime.

Quando eu tentei no Safari, funcionou.

Outras dicas

Há um comentário no código fonte Everyblock sobre isso.

Eles definem uma classe que substitui o tipo mime do feed Django padrão assim:

# 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

Você está usando o modo de exibição disponível para rss? Isto é o que eu tenho no meu urls.py - e eu não ponho nada sobre mimetypes:

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

onde published_feeds é algo 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}

Quando você cria uma HTTPReponse objeto que você pode especificar o seu tipo de conteúdo:

HttpResponse(content_type='application/xml')

Ou seja qual for o tipo de conteúdo realmente é.

Consulte http: // docs .djangoproject.com / en / dev / ref / solicitação-resposta / # django.http.HttpResponse .__ init__

Eu ainda encontrou este problema, 9 anos mais tarde com o Firefox e Django 2.1.

As soluções acima não cortá-la, então eu acabei usando o seguinte:

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

Usando essa classe em vez de Feed define o tipo MIME de 'application / xml', como queria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top