2010-03-22 50 views
3

我有服务的静态XML样式陪从CherryPy的web应用程序的一些动态生成的输出一些麻烦。即使我提供静态文本文件的测试用例也失败了。问题的CherryPy 3.1提供静态文件

静态文件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

我成为这样的静态文件:

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

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

没有,我依然没有欢乐。不过谢谢。仍在'blah.txt'上获得404。如果我正确理解CherryPy配置文件/文件,这应该与我在上面设置的配置文件完全相同? – 2010-03-23 22:18:54

4

cherrypy.config.update只能接收单级字典(主要是server.*项),但你传递一个应该真的是每个应用程序(因此传递到tree.mount)的设置的多级字典。

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

+0

哦,并将'Link'更改为'Link'。 ;) – fumanchu 2010-03-23 22:53:21

+0

排序。完美的工作,谢谢。 – 2010-03-23 22:55:31

1

我有一个类似的设置。比方说,我希望我的网站的根是在http://mysite.com/site和我的网站/应用的根是在/路径/到/ WWW

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

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

我服了道场文件等,从静态目录中没有问题,以及CSS。我还使用genshi进行模板化,并使用cherrypy.url()调用来确保我的其他URL正确设置。这使我可以更改app.mount_point并更新我的链接。