2016-07-06 14 views
0

2つのHTMLページを竜巻で移動しようとしています。ルートと、それぞれのハンドラのコードを以下に示します。私は、ブラウザ上で127.0.0.1:8989をロードすると[Python] [Tornado]:ページ間を移動するときに内部サーバーエラーが発生する

class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     log.info("Rendering index.html") 
     self.render("index.html") 

class NotificationsPageHandler(tornado.web.RequestHandler): 
    def get(self): 
     log.info("Rendering notifications") 
     self.render("notifications.html") 

def start_server(): 

    settings = { 
     "static_path": os.path.join(os.path.dirname(__file__), "static") 
    } 

    application = tornado.web.Application([ 
     (r"/", MainHandler), 
     (r"/notifications.html", NotificationsPageHandler), 
    ], **settings) 

    application.listen(8989) 
    tornado.ioloop.IOLoop.current().start() 

、私はindex.htmlページを取得しますが、私は通過notifications.htmlに移動しようとすると、 index.htmlをアンカータグ、私は次のスタックトレースを取得:

2016-07-06 12:07:06,546 - tornado.application - ERROR - Uncaught exception GET /notifications.html (127.0.0.1) 
HTTPServerRequest(protocol='http', host='127.0.0.1:8989', method='GET', uri='/notifications.html', version='HTTP/1.1', remote_ip='127.0.0.1', headers={'Accept-Language': 'en-US,en;q=0.8', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Host': '127.0.0.1:8989', 'Upgrade-Insecure-Requests': '1', 'Accept-Encoding': 'gzip, deflate, sdch', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36', 'Referer': 'http://127.0.0.1:8989/', 'Connection': 'keep-alive'}) 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/dist-packages/tornado/web.py", line 1443, in _execute 
    result = method(*self.path_args, **self.path_kwargs) 
    File "BADWebServer.py", line 231, in get 
    self.render("notifications.html") 
    File "/usr/local/lib/python3.5/dist-packages/tornado/web.py", line 699, in render 
    html = self.render_string(template_name, **kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/tornado/web.py", line 806, in render_string 
    return t.generate(**namespace) 
    File "/usr/local/lib/python3.5/dist-packages/tornado/template.py", line 345, in generate 
    return execute() 
    File "notifications_html.generated.py", line 5, in _tt_execute 
    _tt_tmp = item.score # notifications.html:37 
NameError: name 'item' is not defined 
2016-07-06 12:07:06,548 - tornado.access - ERROR - 500 GET /notifications.html (127.0.0.1) 4.51ms 

を私は同様のポスト、how to navigate from one html to other in tornado using anchor tagを見てきましたが、私はなぜ私は例外を取得していますかわかりません。

答えて

0

トレースに「name 'item'が定義されていません」というエラーが表示されます。あなたのnotifications.htmlテンプレートは次のようにいくつかのマークアップが含まれています

{{ item.score }} 

...しかし、あなたはSee the template syntax guide for an exampleで「項目」の変数を経過していません。

+0

はい、そうです。しかし、私は、Tornado Webサーバーが、HTMLを解析するのではなくクライアントに返すことを期待していました。私はWebサーバーの仕組みが間違っていると私が理解していると思います!あなたが共有しているリンクからは、TornadoもHTML上で計算を行うことができるようです。 HTMLファイルには、{{item.score}}が使用され、クライアント側でAngularが使用されています。どのように私は竜巻がHTMLを解析して盲目的にそれを返すのを防ぐことができますか? –

+0

Tornadoテンプレートレンダリングを使用したくない場合は、RequestHandlerの代わりにStaticFileHandlerを使用してコンテンツを返します。 –

関連する問題