2009-06-27 2 views
1

Я следил за this tutorial за RSS и каналы ATOM для django, и я получил его на работу.Django: RSS и ATOM каналы Content-Type header?

Однако сервер разработки тестов продолжает заставлять браузер загружать каналы в виде файла вместо браузера, обнаруживая его как XML-документ.

Мой опыт работы с HTTP говорит мне, что в заголовке Content-Type отсутствует тип mime.

Как указать, что в django?

+0

Я знаю, что есть параметр типа пантомимы для render_to_response но не используется для синдикации Джанго. –

+0

Django 'contrib.syndication' устанавливает правильные заголовки содержимого для фида. Проверьте его еще раз с более точным инструментом, чем с сырым браузером. –

+0

У меня такая же проблема в Firefox. mimetype должен быть application/atom + xml для ATOM. Когда я вызываю страницу с помощью GET/page/rss /, она работает нормально, но в POST FF пытается загрузить проклятый файл. – zinovii

ответ

1

Я думаю проблема была с Камино-браузера OS X, а не с заголовком HTTP и типом mime.

Когда я пробовал Safari, это сработало.

1

При создании объекта HTTPReponse вы можете указать его тип содержимого:

HttpResponse(content_type='application/xml') 

или любой другой тип контента на самом деле.

См http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponse.__init__

+0

Как я уже упоминал выше, вы не используете вызов HttpResponse или rendr_to_response с синдикацией в Django. –

3

Вы используете доступный вид на RSS? Это то, что у меня в urls.py - и я ничего о Mimetypes не установка:

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

где published_feeds это что-то вроде

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

В исходном коде Everyblock есть комментарий.

Они определяют класс, который заменяет тип пантомимы стандартной Django кормить так:

# 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