2015-01-22 4 views
0

Я использую Cherrypy 3.2.3, Python 2.7.3. Код:Статические файлы в cherrypy

from jinja2 import Environment, FileSystemLoader 
import cherrypy 
import os 

folder=os.path.abspath(os.curdir) 

class Root(object): 
    @cherrypy.expose 
    def index(self): 
     j2_env = Environment(loader=FileSystemLoader(folder), trim_blocks=True) 
     return j2_env.get_template('index.html').render() 



cherrypy.config.update({ 
    'environment': 'production', 
    'log.screen': True, 
    'server.socket_host': '127.0.0.1', 
    'server.socket_port': 28807, 
}) 

conf = {'static': {'tools.staticdir.on': True, 
        'tools.staticdir.dir' : os.path.join(folder, 'static'), 
       'tools.staticdir.content_types' : {'html': 'application/octet-stream'}}} 

cherrypy.config.update(conf) 

print cherrypy.config 
print os.path.join(folder, 'static') 
cherrypy.quickstart(Root(), '/', config = conf) 

Выход:

{ 'окружающая среда': 'Производство', 'tools.trailing_slash.on': Правда, 'request.show_tracebacks': false, 'log.screen' : True, 'tools.encode.on': True, 'tools.log_tracebacks.on': True, 'server.socket_port': 28807, 'checker.on': False, 'static': {'tools.staticdir.dir ':'/home/ivan/cherypy/cherryblocks/static ',' tools.staticdir.content_types ': {' html ':' application/octet-stream '},' tools.staticdir.on ': True},' server .socket_host ':' 127.0.0.1 ',' request.show_mismatched_params ': False,' tools.log_headers.on ': False,' engine.autoreload_on ': False}

/дома/иван/cherypy/cherryblocks/статический

Я пытаюсь получить http://127.0.0.1:28807/static/style.css:

127.0.0.1 - - [22/Jan/2015: 13: 24: 38] "GET /static/style.css HTTP/1.1" 404 730 "" "Mozilla/5.0 (X11; Linux x86_64; с.в.: 24,0) Gecko/20100101 Firefox/24.0"

Ошибка 404.

Но я могу открыть /home/ivan/cherypy/cherryblocks/static/style.css:

stat /home/ivan/cherypy/cherryblocks/static/style.css

Файл: «/home/ivan/cherypy/cherryblocks/static/style.css» Размер: 2556

Как вишня может служить статическими файлами?

ответ

0

Ключи конфигурации config на уровне приложения должны быть относительными по отношению к серверу пути, например. /static.

conf = { 
    '/static' : { 
    'tools.staticdir.on' : True, 
    'tools.staticdir.dir' : os.path.join(folder, 'static'), 
    'tools.staticdir.content_types' : {'html': 'application/octet-stream'} 
    } 
} 

Также я предлагаю вам сначала поиск по StackOverflow перед тем как задать вопрос, как это имеет quite some CherryPy static content serving questions.