Bottle web app不提供静态css文件

时间:2015-03-30 23:43:11

标签: python bottle

尽管我使用的是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文件位于名为&#34; static&#34;的文件夹中。这是在我的根文件夹

3 个答案:

答案 0 :(得分:9)

而是像这样指定静态路线

@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参数指定为该目录,例如`根= '静态/样式表'。

答案 1 :(得分:1)

我可以看到两个问题:

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

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

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

答案 2 :(得分:0)

或者...将您的 main.css 文件重命名为 main.tpl ,用<style></style>进行书挡,然后将其移至 / views 目录以及其他模板,然后只需将其添加到返回行的开头:

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