2010-07-22 152 views
0

不管DEFAULT_CONTENT_TYPE設置的值如何,強制Django管理站點應用程序中的視圖返回的所有對象都使用「text/html」作爲其內容類型,最好的方法是什麼?我的項目有這個設置爲「application/xhtml + xml」,雖然管理應用程序生成的內容聲稱是有效的XHTML(看它的doctype聲明),但事實並非如此。 Ticket #5704是一個主要問題,我發現了一些內聯表單的問題(即自由使用 ,這不是XHTML中的命名實體)。 Ticket #11684中的評論表明,在管理站點完全支持XHTML之前可能需要一段時間,所以我需要弄清楚如何在管理站點中使用「text/html」,而將默認值保留爲「application/xhtml + xml 「。忽略Django管理站點的DEFAULT_CONTENT_TYPE?

回答

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) 

然後,在我的根URL配置,在致電admin.autodiscover()之前,我將admin.site設置爲這個HTMLAdminSite類的一個實例。它似乎工作正常,但如果有更好的方法,我會很高興聽到它。