私は単純なWebアプリケーションを構築するために竜巻を使用する方法を学んでいます。私は私がデータベースに更新していた値を持つテンプレート変数を更新する方法を見つけ出すことはできませんので、少しこだわっているしかしテンプレートのリアルタイム更新
私がこれまで持っているもの:
トルネードコード:
import json
import ast
from tornado.ioloop import IOLoop
import tornado.options
from tornado import web, gen
from tornado.httpserver import HTTPServer
from tornado.web import Application
from tornado.websocket import WebSocketHandler
import psycopg2
import psycopg2.extensions
conn = psycopg2.connect('dbname= dname user=user password=pass host=localhost port=5432')
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
class MainHandler(web.RequestHandler):
@gen.coroutine
def get(self):
self.render('index.html', result='test')
def poll(fd ,ev):
state = conn.poll()
if state == psycopg2.extensions.POLL_OK:
if conn.notifies:
notify = conn.notifies.pop(0)
dict_notify = json.loads(notify.payload)
print(dict_notify['new_value']['value'])
def listen(channel):
cursor = conn.cursor()
cursor.execute('LISTEN test_channel;')
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers = [(r'/', MainHandler)], debug = True)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen('8888')
io_loop = IOLoop.instance()
io_loop.add_handler(conn.fileno(), poll, io_loop.READ)
listen()
io_loop.start()
マイテンプレートは次のようになります。今
<!DOCTYPE html>
<html lang="en">
<head>
<title>Index</title>
</head>
<body>
<div>{{ result }}</div>
</body>
</html>
、どのようなIワット私のテンプレートで{{result}} になるようにpool()から取得した値です。 pool()関数は、データベース(postgresql db)で更新した値を常に出力しますが、テンプレートで取得する方法はわかりません。何か案は?
すぐに解決できるのは、結果をグローバル変数に格納して、それを 'render'メソッドに渡すことです。 – martinarroyo