Столкнулся вчера с непонятным кешированием в tornado. Смотрите код ниже, в нем чтобы отобразить веб-страницу в формате html в браузере используется метод render, который "рендерит" html файл и он нормально отображается в браузере. Однако если я этот файл (при запущеном сервере tornado) открою еще в текстовом редакторе и изменю содержимое, потом сохраню и перезагружу страницу браузера, то почему-то изменений которые я внес в файл я не увижу. Увижу только если сервер tornado перезапущу, это ужасно. В коде есть поясняющие комментарии, обратите на них внимание
import re
import os
import tornado.ioloop
import tornado.web
import tornado.httputil
import traceback
import asyncio
class handler_index(tornado.web.RequestHandler):
install_dir = ''
def __init__(self, application : "Application", request : tornado.httputil.HTTPServerRequest, **kwargs : any) -> None:
super().__init__(application, request, **kwargs)
self.install_dir = re.sub(r'/[^/]+$', '', os.path.abspath(__file__).replace(u'\\', u'/'))
async def get(self) -> None:
try:
self.render('index.html', test_variable = 'hehe')
'''
# если этот код раскомментировать а "self.render('index.html')" закомментировать
# то все работает как надо такого кеширования не происходит, если я вношу
# изменения в html файл и затем перезагружаю страницу браузера то все изменения
# тут же видны, замечательно, не нужно весь вервер tornano перезапускать.
# Однако этот код имеет недостаток, я немогу в шаблон передать какие то переменные.
try:
with open('index.html', 'r', encoding = 'utf-8') as f:
self.write(f.read())
except OSError as err:
self.write(err)
'''
except Exception as err:
self.write(traceback.format_exc().strip())
async def launch_tornado() -> None:
http_server = tornado.httpserver.HTTPServer(tornado.web.Application([
('/', handler_index)
]))
http_server.bind(80, '127.0.0.1')
http_server.start()
await asyncio.Event().wait()
if __name__ == '__main__':
loop = asyncio.new_event_loop()
tasks = [
loop.create_task(launch_tornado()),
]
loop.run_until_complete(asyncio.wait(tasks))
Кто знает в чем дело?