2017-02-28 42 views
0

我有一個處理程序類和一個主類。處理程序查找t.html而不是查找hello.html。當我打印t值時,我得到hello,當我在模板文件夾中插入一個t.html文件是有效的。 這條線似乎有一些問題render.t(params)使用webpy的Jinja TemplateNotFound錯誤

class Handler(): 
    def write(self, string): 
     return string 

    def render_str(self, template, **params): 
     t = template 
     print t # prints correclt -> hello 
     return render.t(params) # Looks for t.html instead of hello.html 

    def render(self, template, **kw): 
     print template 
     return self.write(self.render_str(template, **kw)) 

class MainPage(Handler): 
    def GET(self): 

     return self.render("hello") 

回答

0

render.t無關名爲t一個單獨的變量。它更類似於render['t'],但您想要做render[t]

這取決於您的render是如何定義的(不會顯示在您的代碼中)。您可以繼承它並添加__getitem__方法,簡單地調用__getattr__

例如,使用web.py模板渲染(而不是神社)

class my_render(web.template.render): 
    def __getitem__(self, name): 
     return self.__getattr__(name) 

>>> render['t']() == render.t() 
>>> t = 'home.html' 
>>> render[t]() == render.home() 
+0

謝謝!我得到它與'def render_str(self,template,** params)一起工作: return eval('render。%s(%s)'%(template,params))''。 'render ['t']'由於某種原因不起作用。我將重寫渲染函數,儘管將所有參數放在函數調用之外。 – Victor

+0

評估是不安全的。使用'getattr(render,t)(** params)' –