Bottle 网络应用程序不提供静态 css 文件

Bottle web app not serving static css files

尽管我使用的是 static_file 方法,但我的 Bottle Web 应用程序无法为我的 main.css 文件提供服务。

app.py

from bottle import *
from xml.dom import minidom
@route('/')
def index():
    return template("index")

@route('/glossaryXML')
def glossary():
    doc_def = minidom.parse("table_definitions.xml")
    terms = doc_def.getElementsByTagName("str_term")
    defins = doc_def.getElementsByTagName("str_definition")
    return template("list", terms=terms, defins=defins)

@route('<filename>.css')
def stylesheets(filename):
    return static_file(filename, root='static')

@error(404)
def fourofour(error):
    return "Error"

run(host='localhost', port=8080, debug=True)

我要访问的页面是索引页,其中index.tpl看起来像

<!DOCTYPE HTML>
<html>
    <head>
        <title>ICT Applications Glossary</title>
        <link type="text/css" href="main.css" rel="stylesheet">
    </head>
    <body>
        It works
    </body>
</html>

我的 CSS 文件位于名为 "static" 的文件夹中,该文件夹位于我的根文件夹中

而是像这样指定您的静态路由

@route('/<filename:path>')
def send_static(filename):
    return static_file(filename, root='static/')

这将为您的静态目录中的任何文件提供服务,而不仅仅是 css。

使其样式表特定

@get('/<filename:re:.*\.css>')
def stylesheets(filename):
    return static_file(filename, root='static/')

注意: 对于后一个选项,您可以将样式表放在它们自己的目录中 'static/css' 或只是 'css' 并将它们与其他静态资源分开(脚本、图像等)来执行此操作只需将 root 参数指定为该目录,例如`root='static/css'.

我看到了 2 个问题:

  • CSS 文件的路径应以斜杠开头,即

    @route('/<filename>.css')
    
  • 只有模式的匹配部分被传递给stylesheets()filename 参数,例如而不是 main.css,它将是 main。将代码更改为:

    @route('/<filename>.css')
    def stylesheets(filename):
        return static_file('{}.css'.format(filename), root='static')
    

或者...将您的 main.css 文件重命名为 main.tpl,书挡为 <style></style>,将其与其他模板一起移动到 /views 目录中,然后简单地添加到 return 行的开头:

return (template ("main"), template ("list", terms=terms, defins=defins))