2009-04-17 4 views
14

Czy można w łatwy sposób używać CherryPy jako serwera WWW, który wyświetli pliki .html w jakimś folderze? Cała dokumentacja wprowadzające CherryPy stwierdza, że ​​zawartość jest generowana dynamicznie:Jak używać cherrypy jako serwera WWW dla plików statycznych?

import cherrypy 
class HelloWorld(object): 
    def index(self): 
     return "Hello World!" 
    index.exposed = True 
cherrypy.quickstart(HelloWorld()) 

Czy jest jakiś prosty sposób na wykorzystanie index.html zamiast metody HelloWorld.index()?

Odpowiedz

31

Ten prosty kod będzie wyświetlać pliki w bieżącym katalogu.

import os 
import cherrypy 

PATH = os.path.abspath(os.path.dirname(__file__)) 
class Root(object): pass 

cherrypy.tree.mount(Root(), '/', config={ 
     '/': { 
       'tools.staticdir.on': True, 
       'tools.staticdir.dir': PATH, 
       'tools.staticdir.index': 'index.html', 
      }, 
    }) 

cherrypy.quickstart() 
+8

Z CherryPy 3.2, musiałem zmienić 'cherrypy.quickstart()' na 'cherrypy.engine.start() 'i' cherrypy.engine.block() 'zanim zawartość zostanie wyświetlona. – technomalogical

+0

Również z CherryPy 3.6 musisz użyć 'cherrypy.engine.start()' i 'cherrypy.engine.block()' –

7

Oto kilka informacji na obsługujących zawartość statyczną z CherryPy: http://docs.cherrypy.org/stable/progguide/files/static.html

BTW, oto prosty sposób podzielić bieżący katalog przez HTTP z Pythona:

 
# Python 3 
$ python -m http.server [port] 

# Python 2 
$ python -m SimpleHTTPServer [port] 
+0

Wiem o SimpleHTTPServer, ale bardzo interesujące jest zrobić to samo z cherrypy. Niestety, tutorial nie mówi nic o udostępnianiu jakiegokolwiek pliku .html jako treści statycznej - tylko predefiniowane pliki .css :( – grigoryvp

+0

Jakie pliki, które wyświetlasz, nie powinny mieć znaczenia, powinno również działać z plikami html. Patrz http: // www.cherrypy.org/wiki/StaticContent#Servingfilesthroughthestaticdirtool Kolejny link: http://www.nabble.com/How-do-I-serve-up-static-file-pages-td20897705.html – codeape

+1

Link wiki zmieniono na http://docs.cherrypy.org/stable/progguide/files/static.html –

-1
# encode: utf-8 

import cherrypy 
WEB_ROOT = "c:\\webserver\\root\\" 

class CServer(object) : 
    @cherrypy.expose 
    def do_contact(self, **params): 
     pass 

cherrypy.server.socket_port = 80 
# INADDR_ANY: listen on all interfaces 
cherrypy.server.socket_host = '0.0.0.0' 
conf = { '/': 
    { 'tools.staticdir.on' : True, 
    'tools.staticdir.dir' : WEB_ROOT, 
    'tools.staticdir.index' : 'index.html' } } 
cherrypy.quickstart(CServer(), config = conf) 
+0

co jeśli masz plik o nazwie do_contact? Ten plik będzie niemożliwe do pobrania? – nosklo

+0

To było z przykładu, wydaje się, że zostałem wprowadzony w błąd i wziąłem "do_contract" dla jakiejś wewnętrznej metody filtrowania, aby zastąpić :) – grigoryvp