参考アドレス
http://www.tornadoweb.org/en/stable/guide/templates.html?highlight=render#ui-modules
すべての上部にこのナビゲーションバーがありますosc のページでは、tornado の UI モジュールを使用してナビゲーション バーを実装し、コードの再利用を実現できます
tornado テンプレートの uimodules を含む my_uimodules.py を追加し、Header.html を追加しました。ナビゲーション バーの HTML コード。単純な HTML ページ page2.html を返すために、page2.py が追加されます。
パス "/" にアクセスしたときの効果
ナビゲーション リンクをクリックします。 「ページ 1」の効果
ナビゲーション リンク「ページ 2」をクリックした場合の効果
import tornado.webclass HeaderBar(tornado.web.UIModule): def render(self, location): return self.render_string("header.html", location=location)class HeaderBar2(tornado.web.UIModule): def render(self, location): return self.render_string("header.html", location=location)
すべてのテンプレート ドライバーは tornado.web.UIModule から継承され、その後call render_string 指定したテンプレートとパラメータを呼び出します。ここではトップ ナビゲーション バーとサイド ナビゲーション バーを記述できます。ここでは、パラメータの場所を受け入れます。これは、ナビゲーション バーのページの説明として使用されます。このテンプレート ドライバーは header.html を返し、それに場所を渡します
header.html<div> <a href="/">主页</a> <a href="/page1">页面1</a> <a href="/page2">页面2</a> <span>你现在处于页面 {{ location }}</span></div>
main.py
import osimport tornado.httpserverimport tornado.ioloopimport tornado.webimport my_uimodulesfrom handlers.home import HomeHandlerfrom handlers.page1 import Page1Handlerfrom handlers.page2 import Page2Handlerclass PageNotFoundHandler(tornado.web.RequestHandler): def get(self): return self.write_error(404)class Application(tornado.web.Application): def __init__(self): handlers = [ (r"/", tornado.web.RedirectHandler, {"url": "/home"}), (r"/home", HomeHandler), (r"/page1", Page1Handler), (r"/page2", Page2Handler), (r".*", PageNotFoundHandler), ] settings = dict( static_path= os.path.join(os.path.dirname(__file__), "static"), template_path=os.path.join(os.path.dirname(__file__), "templates"), ui_modules=my_uimodules, ) tornado.web.Application.__init__(self, handlers, **settings)if __name__ == "__main__": port = 8899 application = Application() http_server = tornado.httpserver.HTTPServer(application, xheaders=True) http_server.listen(port) print('Listen on http://localhost:{0}'.format(port)) print('Listen on http://localhost:{0}/page1'.format(port)) print('Listen on http://localhost:{0}/page2'.format(port)) tornado.ioloop.IOLoop.instance().start()
"ui_modules=my_uimodules"
tornado がテンプレートを処理しているときに、次のような場合に発生します。ステートメントを実行すると、xxxx テンプレート ドライバーを見つけるために設定した ui_modules モジュールに移動します
{% module xxxx %}
ページ コード
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>主页</title></head><body> {% module HeaderBar("主页") %} <h1 id="home_head">这是主页</h1> <script src="/static/js/home.js"></script></body></html>
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>{{ argu1 }}</title></head><body> {% module HeaderBar("页面1") %} <h1>这是Page1</h1> <ul> {% for i in argu2 %} <li>{{ i }}</li> {% end %} </ul></body></html>
page2.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Page2</title></head><body> {% module HeaderBar("页面2") %} <h1>这是Page2</h1></body></html>
全ページA
{% module HeaderBar("Page 2") %}がテンプレート本体の最初の行に追加されます。前述したように、tornado はレンダー テンプレートを処理するときにこの形式のリクエストに遭遇すると、次のヘッダーバーを検索します。 ui_modules で指定されたモジュール my_uimodules を最初のパラメータとして渡し、HeaderBar はこのパラメータを header.html の場所として渡します このように、各ページの上部にあるナビゲーション バーは同じです。違いが反映されます。
コード git アドレス
http://git.oschina.net/donggen/tornado-test