2013-05-18 27 views
2

我使用cherryPy框架來服務我的網站,但它似乎無法找到我的css腳本與靜態路徑或絕對路徑。如果我只是通過瀏覽器轉到index.tmpl文件,css腳本可以正常工作,但是當我通過cherrypy請求它時,它不會使用css腳本。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> 

我究竟做錯了什麼?

EDIT
我與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) 
+0

它wooooorks !!!!謝謝!我不知道爲什麼要添加全局幫助,但它確實如此。我被卡住了兩晚之後就瘋了。現在我希望我知道原因...... – Maciejg

1

不要把你的CSS腳本的絕對路徑,它應該是相對的。

嘗試將它設置爲href="/static/css/main.css"和配置到

[/static] 
tools.staticdir.on = True 
tools.staticdir.dir = 'static' 
+0

這正是配置設置爲,以及關於絕對路徑我有嘗試使用靜態路徑,以及相對路徑,相對於site.py,並相對於index.html,但沒有一個適用於cherrypy。 – Lex

+0

我記得我在正確設置路徑時遇到了一些問題。也許嘗試:將CSS複製到每個目錄中,然後查看它是否有效。如果有效,請刪除一個CSS並重試。 –

+0

多數民衆贊成在一個好主意,我沒有想到這一點,但不幸的是,它仍然無法正常工作。我認爲它必須是cherrypy配置中的某些東西,因爲相對路徑和絕對路徑在不使用cherrypy時可以工作,但是我還沒有弄清楚需要改變什麼。 – Lex