2017-02-28 8 views
0

나는 핸들러 클래스와 메인 클래스를 가지고있다. 그리고 핸들러는 hello.html을 찾는 대신 t.html을 찾습니다. t 값을 인쇄 할 때 hello이 표시되고 템플릿 폴더에 t.html 파일을 삽입하면 작동합니다. 이 줄에 문제가있는 것 같습니다. render.t(params).Jinja TemplateNot 오류를 사용하여 webpy

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.tt라는 별도의 변수에 무관하다. render['t']과 더 비슷하지만 render[t]을 원합니다.

이것은 사용자의 render 정의 방법에 따라 다릅니다 (코드에는 표시되지 않음). 당신은 할 서브 클래스에게 그것을하고 (신사 반대) 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

감사를 렌더링 사용하여 간단하게 예를 들어 __getattr__

호출하는 __getitem__ 방법을 추가 할 수 있습니다! 나는'render render_str (self, template, ** params) : return eval ('render. % s (% s)'% (template, params))'과 함께 작업하게했다. 'render [ 't']'어떤 이유로 작동하지 않았다. 모든 인자를 함수 호출의 외부에두기 위해 render 함수를 다시 작성하겠습니다. – Victor

+0

eval은 안전하지 않습니다. 'getattr (render, t) (** params)'를 사용하십시오. –