在CherryPy 3.1中提供静态文件的问题

时间:2010-03-22 23:20:35

标签: python cherrypy

我在提供静态XML样式表时遇到一些麻烦,以配合来自CherryPy Web应用程序的一些动态生成的输出。甚至我的服务静态文本文件的测试用例都失败了。

静态文件blah.txt位于我的应用程序根目录的/static目录中。

在我的主站点文件中(conesearch.py​​包含CherryPy ConeSearch页面处理程序类):

import conesearch
cherrypy.config.update('site.config')
cherrypy.tree.mount(conesearch.ConeSearch(), "/ucac3", 'ucac3.config')
...

site.config中我有以下选项:

[/]
tools.staticdir.root: conesearch.current_dir

[/static]
tools.staticdir.on: True
tools.staticdir.dir: 'static'

current_dir = os.path.dirname(os.path.abspath(__file__))

中的conesearch.py

然而,我的简单测试页(直接从http://www.cherrypy.org/wiki/StaticContent获取)失败了404:

def test(self):
        return """
        <html> 
        <head>
        <title>CherryPy static tutorial</title>
        </head>
        <body>
        <a href="/static/blah.txt">Link</a>
        </body>
        </html>"""
test.exposed = True

它试图访问127.0.0.1:8080/static/blah.txt,据我估算应该是AOK。有什么想法或建议吗?

干杯,

西蒙

3 个答案:

答案 0 :(得分:4)

cherrypy.config.update应该只接收一个单级字典(大多数是server.*个条目),但是你要传递一个多层次的设置字典,它应该是每个应用程序(因此通过到tree.mount)。

[/]文件中的[/static]site.config部分移到您的ucac3.config文件中,它应该可以正常工作。

答案 1 :(得分:3)

我提供如下静态文件:

config = {'/static':
                {'tools.staticdir.on': True,
                 'tools.staticdir.dir': PATH_TO_STATIC_FILES,
                }
        }

cherrypy.tree.mount(MyApp(), '/', config=config)

答案 2 :(得分:1)

我有类似的设置。假设我希望我的网站的根目录位于http://mysite.com/site,并且我的网站/应用的根位于 / path / to / www

我在server.cfg中有以下配置设置,我发现我的静态文件没有问题:

[global]
...
app.mount_point = '/site'
tools.staticdir.root = '/path/to/www/'
[/static]
tools.staticdir.on = True
tools.staticdir.dir = 'static'

我正在静态目录中提供dojo文件等,没有问题,以及css。我也使用genshi进行模板化,并使用cherrypy.url()调用来确保我的其他URL设置正确。这允许我更改app.mount_point并同时更新我的​​链接。