Загрузка статического контента с помощью CherryPy

Я пробовал сейчас много вещей и часами гуглил, но не смог решить свою проблему.

Файл конфигурации:

[/] 
tools.staticdir.root = "/Users/phil/Dropbox/Projects/AppName" 

[/main.css] 
tools.staticfile.on = True 
tools.staticfile.filename = "/Users/phil/Dropbox/Projects/AppName/css/main.css" 

[/images] 
tools.staticdir.on = True 
tools.staticdir.dir = "images" 

Код CherryPy:

import cherrypy, os
class AppName(object):
def index(self):
    return "<img src='images/logo.jpeg'>"
index.exposed = True

cherrypy.config.update('/Users/phil/Dropbox/Projects/AppName/conf/AppName.config')
cherrypy.quickstart(AppName())

Моя проблема в том, что это не работает, я пробовал все с объединением путей и т. Д., Но изображение и css не загружаются, когда я делаю что-то вроде return '"

Вот ошибка, которую я получаю при загрузке моего приложения:

127.0.0.1 - - [24/May/2012:22:28:47] "GET /images/logo.jpeg HTTP/1.1" 404 1268 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5"

person philipp    schedule 24.05.2012    source источник
comment
Было бы очень полезно добавить некоторые подробности о том, какое поведение вы на самом деле видите. В чем именно ваша проблема?   -  person Gort the Robot    schedule 25.05.2012
comment
Моя проблема в том, что это не работает, это не очень полезное краткое изложение проблемы. Вы должны опубликовать некоторый код и ошибки, которые вы получаете.   -  person David Cain    schedule 25.05.2012
comment
отредактировано со всем кодом и ошибками   -  person philipp    schedule 25.05.2012
comment
Какие разрешения есть у logo.jpeg?   -  person Gort the Robot    schedule 25.05.2012
comment
644. Но если я напишу html в обычный html-файл и открою его, он сработает :(   -  person philipp    schedule 25.05.2012


Ответы (4)


Не уверен, в чем проблема, но это работает:

[/]
tools.staticdir.root = "/Users/phil/Dropbox/Projects/AppName"

[/images]
tools.staticdir.on = True
tools.staticdir.dir = "images"

Запустите приложение с помощью:

cherrypy.quickstart(AppName(), '/', 'AppName.config')

Код CherryPy:

def index(self):
    return "<img src='/images/logo.jpeg'>"
index.exposed = True

Я думаю, что / перед изображениями также важно. Спасибо всем

person philipp    schedule 29.05.2012

Взгляните на раздел Обслуживание статического контента в Руководство Cherrypy и посмотрите, может ли это вам помочь.

В качестве альтернативы, вот то, что я раньше использовал для доставки статического контента — словарь внутри main().

conf = {
        '/':
        {'tools.staticdir.root': os.path.dirname(os.path.abspath(__file__))},
          '/css': {
          'tools.staticfile.on': True,
          'tools.staticfile.filename': os.path.join(os.path.dirname(os.path.abspath(__file__)), 'css/')
        }
      }
cherrypy.quickstart(AppName(), config=conf)
person Makoto    schedule 24.05.2012
comment
я пробовал это, но я получаю ту же ошибку. Я также прочитал руководство и попробовал все это, но ничего не помогло. Я попробовал это сейчас на ПК с Windows с другим файлом, та же ошибка. - person philipp; 25.05.2012

Добавьте это в свой файл конфигурации:

[/]
tools.staticdir.debug: True
log.screen: True

Вы должны сразу же сузить круг проблемы.

person fumanchu    schedule 25.05.2012
comment
Если я добавлю это в конфигурацию, ничего не изменится. Нет файла журнала или вывода журнала в терминале. Я так понимаю проблема с загрузкой конфигурационного файла? я постараюсь загрузить это прямо как дикт - person philipp; 29.05.2012

Я потратил некоторое время на то, чтобы это работало в Windows, поэтому я надеюсь, что будет полезно поделиться тем, что (в настоящее время) работает. Я использую cherrypy.quickstart(website(), '/', "server.conf") для запуска сервера.

Я обнаружил, что мне нужно указать подпапку в js вручную.

## Server Configuration
[global]
server.socket_port = 3030
#engine.autoreload.on = False  #Might as well turn off when working on HTML
log.error_file = "H:\\My Documents BACKED UP\GitProjects\website\logfile"

[/]
tools.staticdir.debug = True
log.screen = True
tools.sessions.on = True

[/js]
tools.staticdir.on = True
tools.staticdir.dir = "H:\\My Documents BACKED UP\GitProjects\website\js"

[/js/vendor]
tools.staticdir.on = True
tools.staticdir.dir = "H:\\My Documents BACKED UP\GitProjects\website\js\\vendor"

[/img]
tools.staticdir.on = True
tools.staticdir.dir = "H:\\My Documents BACKED UP\GitProjects\website\img"

[/css]
tools.staticdir.on = True
tools.staticdir.dir = "H:\\My Documents BACKED UP\GitProjects\website\css"
person TimSmith-Aardwolf    schedule 28.03.2017