簡體   English   中英

在Python中將MIME類型與HTTPServer混合

[英]Mixing mime types with HTTPServer in python

現在我有這個文件結構

server-
      |
      |css-
      |   |bad.css
      |
      |html-
      |    |bad.html
      |
      |jpg-
      |      |bad.jpg
      |
      |server.py

這是bad.css:

body
{
    background-image:url('bad.jpg');
    background-repeat:no-repeat;
    background-position:right top;
    margin-right:200px;
}

這是bad.html:

<html>
<head>
<link rel="stylesheet" type="text/css" href="bad.css">
</head>
<body>
    <h1>This isn't a thing!</h1>
    <p>You must be mistaken. But <a href="/index">here</a> is where you can find your way again.</p>
</body>
</html>

這是server.py的相關部分

from BaseHTTPServer import BaseHTTPRequestHandler as Handler
from mime types import guess_type

class MyHandler(Handler):
    def do_GET(self):
        print self.path
        print self.headers
        extensions = ['html', 'css', 'jpg']
        fname = self.path
        for ext in extensions:
            if fname.endswith(ext):
                fname = ext + fname
                break
        if fname.split('/')[0] == '':
            fname = 'html/bad.html'
        mimetype = guess_type(fname)[0]
        print fname
        data = open(fname, 'rb')
            self.send_response(200)
        self.send_header('Content-type', mimetype)
        self.end_headers()
        self.wfile.write(data.read())
        data.close()

我更新的代碼應該已經修復了它,但是現在我的瀏覽器根本不渲染它,只顯示了html代碼。 我所看到的屏幕截圖

您的CSS和圖片無法加載的原因是,您的處理程序不知道如何處理這些文件的請求。 這是一個簡單的示例,它從您鏈接到的問題的nosklo的答案中復制(並稍作調整)。

def do_GET(self):
    try:
        if self.path in ("", "/"):
            filepath = "html/bad.html"
        else:
            filepath = self.path.lstrip("/")

        f = open(os.path.join('.', filepath), "rb")

    except IOError:
        self.send_error(404,'File Not Found: %s ' % filepath)

    else:
        self.send_response(200)

        #this part handles the mimetypes for you.
        mimetype, _ = mimetypes.guess_type(filepath)
        self.send_header('Content-type', mimetype)
        self.end_headers()
        for s in f:
            self.wfile.write(s)

注意:您必須將html中的css鏈接從

<link rel="stylesheet" type="text/css" href="../css/bad.css">

<link rel="stylesheet" type="text/css" href="/css/bad.css">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM