我们有这个代码,它工作正常。做完重构后,它不再起作用了。就像评论所说,如果请求不是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)},我们得到的全局变量值是未定义的。
答案 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请求在上下文中可用