python简单的HTTP服务器没有加载字体 - 真棒字体

时间:2016-11-29 13:43:26

标签: python font-awesome simplehttpserver

我正在尝试使用简单的HTTP服务器加载字体,但可以让它工作,我只能得到小方块。

我认为这可能是某种哑剧类型的问题。 如果页面直接在浏览器中打开,而不是由简单的HTTP服务器加载,则会加载HTML页面和字体真棒字体。

这个问题似乎相同,但放置

<meta charset="UTF-8"> 
HTML代码中的

没有帮助我。 Font awesome not loading when using Python simple http server

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from os import curdir, sep
import cgi

import subprocess as sub
import time

PORT_NUMBER = 8080


class myHandler(BaseHTTPRequestHandler):


    def do_GET(self):
        if self.path=="/":
            self.path="/index.html"

        try:

            sendReply = False
            if self.path.endswith(".html"):
                mimetype='text/html'
                sendReply = True
            if self.path.endswith(".jpg"):
                mimetype='image/jpg'
                sendReply = True
            if self.path.endswith(".png"):
                mimetype='image/png'
                sendReply = True
            if self.path.endswith(".gif"):
                mimetype='image/gif'
                sendReply = True
            if self.path.endswith(".svg"):
                mimetype='image/svg+xml'
                sendReply = True
            if self.path.endswith(".css"):
                mimetype='text/css'
                sendReply = True
            if self.path.endswith(".js"):
                mimetype='application/javascript'
                sendReply = True
            if self.path.endswith(".ttf"):
                mimetype='application/x-font-ttf'
                sendReply = True
            if self.path.endswith(".otf"):
                mimetype='application/x-font-opentype'
                sendReply = True
            if self.path.endswith(".woff"):
                mimetype='application/font-woff'
                sendReply = True

            if sendReply == True:
                #Open the static file requested and send it
                f = open(curdir + sep + self.path, 'rb')
                self.send_response(200)
                self.send_header('Content-type',mimetype)
                self.end_headers()
                self.wfile.write(f.read())
                f.close()
                print(curdir + sep + self.path)
            return

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

    def do_POST(self):

        if self.path=="/run":
            form = cgi.FieldStorage(
                fp=self.rfile,
                headers=self.headers,
                environ={'REQUEST_METHOD':'POST',
                         'CONTENT_TYPE':self.headers['Content-Type'],
            })


                        #self.send_response(200)
                        #self.end_headers()
            return

这是html页面的一部分:

<html>
    <head>
        <meta charset="UTF-8">
        <title>HW Test</title>

        <!-- Bootstrap -->

        <link href = "css/bootstrap.min.css" rel="stylesheet"></link>
        <link href = "css/custom.css" rel="stylesheet"></link>
        <link href = "css/font-awesome.min.css" rel="stylesheet"></link>

        <script src="js/bootstrap.min.js"></script>

</head>


<body>
    <div class = "container"> 
        <div class="row">
            <input id="box1" type="checkbox" />
            <label for="box1">Checkbox 1</label>
            <input id="box2" type="checkbox" />
            <label for="box2">Checkbox 2</label>
        </div>
...

复选框显示为小方块,而不是复选框。 这些应该通过不会加载的font-awesome来显示。

1 个答案:

答案 0 :(得分:1)

我认为问题出现在字体文件名中,例如font-awesome.css的最后一个版本包含:

@font-face {
  font-family: 'FontAwesome';
  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
  src: url('./fonts/fontawesome-webfont.woff2?v=4.7.0') ...

这意味着self.path包含以下内容:

/fonts/fontawesome-webfont.woff2?v=4.7.0

if self.path.endswith(".woff")这样的检查会失败。