2014-12-24 13 views
6

Próbuję obsłużyć stronę ze statycznego katalogu przy użyciu API Tornado w Pythonie. This answer is similar to what I am trying to do, ale nie mogę tego zmusić do działania.Python Tornado render statyczny katalog

Moja struktura katalogów wygląda następująco (wszystkie pliki statyczne są w folderze o nazwie web):

directory file structure

Mam konfiguracji serwera WWW takiego:

class Application(tornado.web.Application): 
    def __init__(self): 
     handlers = [ 
      (r'/ws', WSHandler), 
      (r'/', IndexHandler), 
     ] 
     settings = { 
      "debug": True, 
      "static_path": os.path.join(os.path.dirname(__file__), "web") 
     } 
     tornado.web.Application.__init__(self, handlers, **settings) 

http_server = tornado.httpserver.HTTPServer(Application()) 
http_server.listen(8888) 
tornado.ioloop.IOLoop.instance().start() 

myślałem linia ta:

"static_path": os.path.join(os.path.dirname(__file__), "web") 

mogło rozwiązaniu problemu, ale kiedy wskazać plik index.html:

class IndexHandler(tornado.web.RequestHandler): 
    @tornado.web.asynchronous 
    def get(self): 
     self.render('web/index.html') 

Służy strony zgodnie z oczekiwaniami, ale drukuje ten komunikat o błędzie do konsoli:

WARNING:tornado.access:404 GET /css/reset.css (::1) 3.57ms 
WARNING:tornado.access:404 GET /js/lib/custom-marker.js (::1) 0.96ms 
WARNING:tornado.access:404 GET /js/map.js (::1) 2.08ms 
WARNING:tornado.access:404 GET /js/websocket-client.js (::1) 1.56ms 
WARNING:tornado.access:404 GET /css/index.css (::1) 0.89ms 

W tej minimalistycznej przykład , jak mogę naprawić mój problem? Gdzie próbuje wskazać i nie może znaleźć plików?

Każda pomoc, jakiej możesz udzielić, byłaby bardzo doceniana!

Odpowiedz

4

Zgodnie z sekcją dokumentacji na temat Static files and aggressive file caching, przedrostek adresów URL "css" i "js" z "web" powinien rozwiązać problem. Na przykład:

/css/reset.css powinny być /web/css/reset.css

Albo po prostu użyć zalecanego static_url w szablonach (jeśli je za pomocą):

{{ static_url("css/reset.css") }} 
+0

Wow, które działało! Dziękuję bardzo! –

+0

Dokładnie. quoting: "To ustawienie automatycznie spowoduje, że wszystkie żądania zaczynające się od/static/serve z tego statycznego katalogu, np. http: // localhost: 8888/static/foo.png będą obsługiwały plik foo.png z określonego katalogu statycznego. " – Ross

1

Alternatywnie można określić wieloznacznych do statycznego dir do wyrenderować wszystkie pliki z określonego katalogu, w czasie inicjowania aplikacji w trakcie inicjowania aplikacji. Kod Bove mapuje wszystkie statyczne adresy URL odpowiednio,

<script src="js/jquery-1.10.1.min.js"></script> 

zostaną odwzorowane na /static/js dir,

(r'/js/(.*)', web.StaticFileHandler, {'path': './static/js'}) 

i tak cały CSS i obrazów do ich twórców map,

(r'/css/(.*)', web.StaticFileHandler, {'path': './static/css'}), 
(r'/images/(.*)', web.StaticFileHandler, {'path': './static/images'}), 
+0

Awesome! to pomogło. –