我在提供静态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。有什么想法或建议吗?
干杯,
西蒙
答案 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并同时更新我的链接。