使用tornado==4.1
这是应用程序:
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write(templates.load("index.html").generate())
class NavModule(tornado.web.UIModule):
def render(self):
return self.render_string('modules/navigation.html')
class FooterModule(tornado.web.UIModule):
def render(self):
return self.render_string('modules/footer.html')
application = tornado.web.Application(
tornadio2.TornadioRouter(SocketConnection).apply_routes(routes),
handlers=[(r'/', MainHandler)],
ui_modules={'Footer': FooterModule,
'NavigationModule': NavModule})
模板页面的一部分:
<ul>
{% block right-nav %}
<li>
{% module GlitchNavigationModule() %}
</li>
</ul>
</section>
{% end %}
</div>
{% block footer %}
<div class="container">
{% module Footer() %}
</div>
{% end %}
对于模块Footer
,它按预期工作,但对于NavigationModule
错误:
NameError: global name '_tt_modules' is not defined
我可以这样做:
{% include 'modules/navigation.html' %}
甚至,apparently分配变量:
{% set some_variable = "text2" %}
但任何人都可以看到或解释为什么只有一个模块实际按预期工作?
答案 0 :(得分:1)
要使用UIModules
,您必须使用RequestHandler.render
方法。这意味着将template_path
或template_loader
传递给Application
构造函数(而不是像您在此处所做的那样创建全局模板加载器),并使用self.render('index.html')
代替{{ 1}}