未定义全局名称“_tt_modules”

时间:2015-04-09 04:01:38

标签: tornado

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

但任何人都可以看到或解释为什么只有一个模块实际按预期工作?

1 个答案:

答案 0 :(得分:1)

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