将Django管理站点应用中的视图返回的所有HttpResponse
对象强制使用“text / html”作为其内容类型的最佳方法是什么,无论{{1 }} 设置?我的项目设置为“application / xhtml + xml”,虽然管理员应用程序生成的内容声称是有效的XHTML(查看其doctype声明),但事实并非如此。 Ticket #5704是一个主要问题,我发现了内联表单的一些问题(即自由使用DEFAULT_CONTENT_TYPE
,它不是XHTML中的命名实体)。 Ticket #11684中的评论表明管理站点可能需要一段时间才能完全支持XHTML,因此我需要弄清楚如何使用“text / html”作为管理站点,同时将默认值保留为“应用程序” / XHTML + XML“。
答案 0 :(得分:1)
我不确定这是否是最佳方式,但我最终通过继承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
类的实例。它似乎工作正常,但如果有更好的方法,我会很高兴听到它。