Mako动态模板继承

时间:2013-06-27 15:30:12

标签: python django-templates pyramid mako

我们有这个代码,它工作正常。做完重构后,它不再起作用了。就像评论所说,如果请求不是ajax请求,我们只想从基页继承。为此,我们将参数传递给模板,并根据参数继承或不继承。

View.py

class Router(object):
    def __init__(self, request):
        self.request = request

    @view_config(route_name="home")
    def get(self):
        template = "home.mak"
        value = {'isPage':self.request.is_xhr is False}
        return render_to_response(template, value, request=self.request)

Template.mak

##conditional to determine with the template should inherit from the base page
##it shouldn't inherit from the base page is it is being inserted into the page using ajax
<%!

   def inherit(context):
       if context.get('isPage') == True:
           return "base.mak"
       else:
           return None
%>
<%inherit file="${inherit(context)}"/>

目前,错误是Undefined没有属性 __ getitem __ 。如果我们将$ {inherit(context)}更改为$ {inherit(value)},我们得到的全局变量值是未定义的。

3 个答案:

答案 0 :(得分:1)

刚遇到同样的问题,同样的用例实际上(渲染布局或不依赖于请求是XHR)。

您显然可以通过request访问context,这样就可以避免在两个地方(视图和模板)分割这一小部分逻辑:

<%!
   def inherit( context ):
       if not context.get('request').is_xhr:
           return 'layout_reports.mako'
       else:
           return None
%>
<%inherit file="${inherit(context)}"/>

答案 1 :(得分:0)

我们做了一个相当大的重构,上面的代码再次运行。我猜测传入的上下文未初始化或其中一个模板中存在语法错误。

另外,请求对象有一个名为is_xhr的属性,如果请求是异步的,则该属性为true。我们正在使用此属性来确定是否需要加载整页。所以is_page = self.request.is_xhr是假的

答案 2 :(得分:-1)

我不确定这是否有效

 %if not request.is_xhr:
 <inherit file='base.mako'/>
 %endif

Aassuming请求在上下文中可用