Игнорировать DEFAULT_CONTENT_TYPE для сайта администрирования Django? - PullRequest
0 голосов
/ 22 июля 2010

Каков наилучший способ заставить все объекты HttpResponse, возвращаемые представлениями в приложении администратора сайта Django, использовать "text / html" в качестве типа контента, независимо от значения параметра DEFAULT_CONTENT_TYPE? Мой проект имеет этот набор «application / xhtml + xml», и хотя контент, созданный приложением администратора, претендует на то, чтобы быть действительным XHTML (посмотрите на его объявление doctype), это не так. Билет № 5704 является серьезной проблемой, и я обнаружил некоторые проблемы со встроенными формами (а именно, либеральное использование  , которое не является именованным объектом в XHTML). Комментарий в Ticket # 11684 указывает, что может пройти некоторое время, прежде чем сайт администратора полностью поддержит XHTML, поэтому мне нужно выяснить, как использовать "text / html" для сайта администратора, оставляя по умолчанию это "application / xhtml + xml."

1 Ответ

1 голос
/ 22 июля 2010

Я не уверен, является ли это лучшим способом сделать это или нет, но я наконец достиг своей цели, создав подкласс AdminSite и переопределив метод admin_view:

class HTMLAdminSite(admin.AdminSite):
    '''Django AdminSite that forces response content-types to be text/html

    This class overrides the default Django AdminSite `admin_view` method. It
    decorates the view function passed and sets the "Content-Type" header of
    the response to 'text/html; charset=utf-8'.
    '''

    def _force_html(self, view):
        def force_html(*arguments, **keywords):
            response = view(*arguments, **keywords)
            response['Content-Type'] = 'text/html; charset=utf-8'
            return response
        return force_html

    def admin_view(self, view, *arguments, **keywords):
        return super(HTMLAdminSite, self).admin_view(self._force_html(view),
                                                     *arguments, **keywords)

Затем,в моем корневом URLconf перед вызовом admin.autodiscover() я установил admin.site для экземпляра этого класса HTMLAdminSite.Кажется, все работает хорошо, но если есть лучший способ, я буду рад это услышать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...