未定义全局名称“_tt_modules”

global name '_tt_modules' is not defined

使用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" %}

但是谁能看到或解释为什么只有一个模块真正按预期工作?

要使用 UIModules,您必须使用 RequestHandler.render 方法。这意味着将 template_pathtemplate_loader 传递给 Application 构造函数(而不是像您在这里所做的那样创建全局模板加载器),并使用 self.render('index.html') 而不是 self.write(templates.load('index.html').generate())