2014-12-24 14 views
6

Tôi đang cố gắng phân phối một trang từ một thư mục tĩnh bằng cách sử dụng API Tornado bằng Python. This answer is similar to what I am trying to do, nhưng tôi không thể làm cho nó hoạt động.Python Tornado hiển thị thư mục tĩnh

cấu trúc thư mục của tôi trông như thế này (tất cả các file tĩnh là bên trong một thư mục có tên web):

directory file structure

Tôi có một thiết lập máy chủ web như thế này:

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() 

tôi nghĩ dòng này:

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

có thể đã cố định được vấn đề, nhưng khi tôi trỏ đến index.html file:

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

Nó phục vụ các trang như mong đợi, nhưng in thông báo lỗi này ra cửa sổ Console:

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 

Trong ví dụ Minimalistic này , làm cách nào để khắc phục sự cố của tôi? Nó cố gắng trỏ đến đâu và không thể tìm thấy các tập tin?

Bất kỳ trợ giúp nào bạn có thể cung cấp sẽ được đánh giá rất nhiều!

Trả lời

4

Theo phần tài liệu trên Static files and aggressive file caching, tiền tố các url "css" và "js" của bạn bằng "web" sẽ giải quyết được sự cố của bạn. Ví dụ:

/css/reset.css nên /web/css/reset.css

Hoặc chỉ cần sử dụng đề nghị static_url trong các mẫu của bạn (nếu bạn đang sử dụng chúng):

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

Wow đã làm việc! Cảm ơn bạn rất nhiều! –

+0

Chính xác. quoting: "Cài đặt này sẽ tự động thực hiện tất cả các yêu cầu bắt đầu bằng/static/serve từ thư mục tĩnh đó, ví dụ: http: // localhost: 8888/static/foo.png sẽ phục vụ tệp foo.png từ thư mục tĩnh được chỉ định. " – Ross

1

Hoặc bạn có thể chỉ định đại diện để các tĩnh của dir hiển thị tất cả các tệp từ thư mục được chỉ định, tại thời điểm khởi tạo ứng dụng

app = web.Application([ 
    (r'/', IndexHandler), 
    (r'/js/(.*)', web.StaticFileHandler, {'path': './static/js'}), 
    (r'/css/(.*)', web.StaticFileHandler, {'path': './static/css'}), 
    (r'/images/(.*)', web.StaticFileHandler, {'path': './static/images'}), 

]) 

a đang Bove sẽ lập bản đồ tất cả các URL của tĩnh cho phù hợp,

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

sẽ được ánh xạ tới /static/js dir,

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

Và như vậy, tất cả các css, và hình ảnh để vẽ bản đồ của mình,

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

Tuyệt vời! đã giúp. –

Các vấn đề liên quan