我們有這個代碼,它工作正常。重構後,它不再工作。就像評論所說,如果請求不是ajax請求,我們只想從基本頁面繼承。爲此,我們將參數傳遞給模板,並根據參數繼承或不繼承。Mako動態模板繼承
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)}"/>
目前,錯誤的是未定義沒有屬性__ 的GetItem __。如果我們將$ {inherit(context)}更改爲$ {inherit(value)},那麼我們得到的全局變量值是未定義的。
你可以嘗試把所有的邏輯到inherit標籤?只是將函數調用從等式中刪除:$ {'base.mak'if context.get('isPage')else None} –
我不認爲這是問題所在。我們做了相當大的重構,上面的代碼再次運行。我猜傳入的上下文沒有初始化,或者其中一個模板出現語法錯誤。 – JeffRegan
另外,請求對象有一個名爲is_xhr的屬性,如果請求是異步的,則該屬性爲true。我們使用這個屬性來確定我們是否需要加載整個頁面。所以is_page = self.request.is_xhr是False – JeffRegan