CherryPy не может найти скрипт CSS (статические или абсолютные пути)
Я использую платформу cherryPy для обслуживания своего сайта, но кажется, что мой сценарий CSS не может найти ни статический путь, ни абсолютный путь. Скрипт css работает нормально, если я просто захожу в файл index.tmpl через браузер, но когда я запрашиваю его через cherrypy, он не использует скрипт css.
Структура корневого каталога:
site.py
template/index.tmpl
static/css/main.css
site.py
import sys
import cherrypy
import os
from Cheetah.Template import Template
class Root:
@cherrypy.expose
def index(self):
htmlTemplate = Template(file='templates/index.tmpl')
htmlTemplate.css_scripts=['css/main.css']
return str(htmlTemplate)
# On Startup
current_dir = os.path.dirname(os.path.abspath(__file__)) + os.path.sep
cherrypy.config.update({
'environment': 'production',
'log.screen': True,
'server.socket_host': '127.0.0.1',
'server.socket_port': 2000,
'engine.autoreload_on': True,
'/':{
'tools.staticdir.root' : current_dir,
},
'/static':{
'tools.staticdir.on' : True,
'tools.staticdir.dir' : "static",
},
})
cherrypy.quickstart(Root())
шаблон / index.tmpl
<!DOCTYPE html>
<html>
<head>
#for $script in $css_scripts:
<link rel="stylesheet" href="$script" type="text/css" />
#end for
<link rel="stylesheet" href="C:/ABSOLUTE/PATH/main.css" type="text/css" />
</head>
<body>
<! MY HTML CODE IS HERE>
</body>
</html>
Что я делаю неправильно?
РЕДАКТИРОВАТЬ
Я пробовал с static/css/main.css
как статический путь
Я также пробовал относительные пути, относительно site.py и относительно index.tmpl
Это ошибка, которую я получаю:
GET http://localhost:2000/static/css/main.css 404 (Not Found)
2 ответа
Я не уверен, почему это работает, но после попытки миллионов вещей это то, что исправило это. Если кто-то знает, почему, пожалуйста, просветите меня.
- Я изменил
config
словарь, чтобы иметь всеglobal
переменные в под-словаре. - Я избавился от
cherrypy.config.update()
функционировать и кормить конфиг напрямуюcherrypy.quickstart()
вот измененный код:
import sys
import cherrypy
import os
from Cheetah.Template import Template
class Root:
@cherrypy.expose
def index(self):
htmlTemplate = Template(file='templates/index.tmpl')
htmlTemplate.css_scripts=['static/css/main.css']
return str(htmlTemplate)
# On Startup
current_dir = os.path.dirname(os.path.abspath(__file__)) + os.path.sep
config = {
'global': {
'environment': 'production',
'log.screen': True,
'server.socket_host': '127.0.0.1',
'server.socket_port': 2000,
'engine.autoreload_on': True,
'log.error_file': os.path.join(current_dir, 'errors.log'),
'log.access_file': os.path.join(current_dir, 'access.log'),
},
'/':{
'tools.staticdir.root' : current_dir,
},
'/static':{
'tools.staticdir.on' : True,
'tools.staticdir.dir' : 'static',
},
}
cherrypy.quickstart(Root(), '/', config)
Не указывайте абсолютный путь к вашему скрипту CSS, он должен быть относительным.
Попробуйте установить его href="/static/css/main.css"
и конфиг для
[/static]
tools.staticdir.on = True
tools.staticdir.dir = 'static'