Я пытаюсь предоставить html-файл, который включает в себя некоторые CSS и Javascript из статического каталога, используя cherryPy. Когда я монтирую приложение в root cherrypy.tree.mount(noVNC(), '/', conf)
, оно работает нормально, но когда я монтирую что-либо кроме этого (например, cherrypy.tree.mount(noVNC(), '/notroot', conf)
, я получаю 404 ошибки, когда браузер пытается получить включенные скрипты, даже если кажется, что он смотрит вправильный каталог. HTML подается просто отлично, вероятно, потому что я непосредственно читаю его в скрипте Python.
Структура файла
noVNCserver.py
noVNCstatic/
vnc.html
custom.js
css/
styles.css
Мой код:
noVNCserver.py
import os
import cherrypy
class noVNC(object):
@cherrypy.expose
def index(self):
with open('noVNCstatic/vnc.html') as f:
html = f.read()
return html
if __name__ == '__main__':
conf = {
'/': {
'log.error_file': '',
'log.access_file': '',
'tools.staticdir.root': os.path.abspath(os.getcwd()),
},
'/static': {
'tools.staticdir.on': True,
'tools.staticdir.dir': './noVNCstatic'
}
}
cherrypy.server.socket_host = '0.0.0.0'
cherrypy.server.socket_port = 8050
cherrypy.tree.mount(noVNC(), '/notroot', conf)
cherrypy.engine.start()
cherrypy.engine.block()
vnc.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>noVNC</title>
<meta charset="utf-8">
<link href="/static/css/styles.css" rel="stylesheet">
<script type="module" src="/static/custom.js"></script>
</head>
<body>
<div>
<p>stuff</p>
</div>
</body>
Когда браузер пытается получить, например, файл styles.css, он отправляет запрос GET на http://localhost:8050/static/css/styles.css иполучает ошибку 404 not found, аналогично custom.js. Я попытался включить отладку staticdir: при монтировании в root я получаю сообщения в журнале, сообщающие, что staticdir правильно получает запрошенные файлы из статического каталога;монтирование на что-то, кроме root, я просто ничего не получаю в журнале, кроме начального успешного GET для html-файла.