Tornadoを使ってみる

staticディレクトリの追加


tornadoではこのように簡単にイメージを表示することができます。


テンプレートファイルに表示したいイメージファイルを記述するだけです。
ただし、必ずイメージファイルはstaticディレクトリに置く必要が有ります。
<html>
  <head>
    <title>Hello World</title>
  </head>
  <body>
    <img src="/static/tornado.jpg" alt="tornado.jpg">
  </body>
</html>

tornadoでは静的なファイルは全てstaticディレクトリの下に配置しないと、テンプレートエンジンがファイルを参照する事ができませ ん。
例えばイメージをimagesディレクトリにコピーして、テンプレートを変更してもイメージが正しく表示されません。
<html>
  <head>
    <title>Hello World</title>
  </head>
  <body>
    <!--
    <img src="/static/tornado.jpg" alt="tornado.jpg">
    -->
    <img src="/images/tornado.jpg" alt="tornado.jpg">
  </body>
</html>



イメージファイルが見つからないので代替メッセージだけが表示されます。



こちら
に static以外のディレクリを静的ディレクトリに追加する手順が公開されています。
imagesを静的ディレクトリに追加する場合は以下の様になります。
#!/usr/bin/env python
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import os

from tornado.options import define, options
define("port", default=8080, help="run on the given port", type=int)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("static.html")

if __name__ == "__main__":
    app = tornado.web.Application(
        handlers=[
            (r'/images/(.*)', tornado.web.StaticFileHandler, {'path': "images"}),
            (r'/static/(.*)', tornado.web.StaticFileHandler, {'path': "static"}),
            (r'/', IndexHandler)
        ],
        template_path=os.path.join(os.getcwd(), "templates"),
        #static_path=os.path.join(os.getcwd(), "static"),
        #**settings,
        debug=True
    )
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()

これでimages/tornado.jpgが表示されるようになります。

続く...