我想在Django下面提供靜態文件(HTML + CSS)。 (稍後,我會密碼保護他們)。但是,我收到了錯誤的內容類型。 HTML文件被下載,不顯示。Apache下的Django帶有靜態HTML + CSS文件的內容類型問題?
我的網絡服務器是Apache,我在Webfaction下運行它。我在Chromium 18下查看該網站。
我正在嘗試一個天真的FileWrapper(從Django發送文件)方法,其中我使用mimetype來確定類型,以及x_modsendfile,我讓Web服務器決定。
下載HTML文件,不顯示。
以下是內容頭應該是,當我服務過我的Apache網絡服務器不Django的:
HTTP/1.1 200 OK =>
Server => nginx
Date => Wed, 19 Sep 2012 21:51:35 GMT
Content-Type => text/html
Content-Length => 9362
Connection => close
Vary => Accept-Encoding
Last-Modified => Wed, 19 Sep 2012 05:53:00 GMT
ETag => "e3a0c43-2492-4ca079e8fea23"
Accept-Ranges => bytes
注意服務器聲稱是nginx的。 Webfaction表示,對於靜態服務,它設置了Apache,並且實際上我已經爲Django配置了一個Apache服務器。但響應說Nginx的
下面是從幼稚FileWrapper執行的響應,其中我選擇使用MIME類型的內容類型(!):
HTTP/1.1 200 OK =>
Server => nginx
Date => Wed, 19 Sep 2012 21:53:28 GMT
Content-Type => ('text/html', none)
Content-Length => 9362
Connection => close
的內容類型是一個元組。
下面是從mod_xsendfile實施,其中我不選擇將Content-Type響應:
HTTP/1.1 200 OK =>
Server => nginx
Date => Wed, 19 Sep 2012 21:52:40 GMT
Content-Type => text/plain
Content-Length => 9362
Connection => close
Vary => Accept-Encoding
Last-Modified => Wed, 19 Sep 2012 05:53:00 GMT
ETag => "e3a0c43-2492-4ca079e8fea23"
這裏是我的代碼:
def _serve_file_xsendfile(abs_filename):
response = django.http.HttpResponse() # 200 OK
del response['content-type'] # We'll let the web server guess this.
response['X-Sendfile'] = abs_filename
return response
def _serve_file_filewrapper(abs_filename):
p_filename = abs_filename
if not os.path.exists(p_filename):
raise Exception('File %s does not exist!')
try:
_content_type = mimetypes.guess_type(p_filename)
except:
_content_type = 'application/octet-stream'
print p_filename, _content_type
wrapper = FileWrapper(file(p_filename))
response = HttpResponse(wrapper, content_type=_content_type)
response['Content-Length'] = os.path.getsize(p_filename)
response['Content-Type'] = _content_type
return response
def _serve_file(filename):
abs_filename = _get_absolute_filename(filename)
return _serve_file_filewrapper(abs_filename)
def public_files(request, filename):
return _serve_file(filename)
如何獲取正確的內容要爲FileWrapper還是mod_xsendfile方法提供類型?
或本:_content_type = mimetypes.guess_type(p_filename)[0]考慮到你不需要編碼... –