2015-07-28 43 views
0

是否可以在控制器級別的Play Framework的其他模板中注入模板?Play Framework 2.3通過/注入模板作爲控制器級別其他模板的參數

我:

Ok(views.html.staticpages.index("Your new application is ready.")(views.html.shared.header.unauthenticatedheader())) 

,但它給我的錯誤:

類型不匹配,期望的Html,任何

試圖通過views.html.shared.header.unauthenticated當實際[...] index,index收到一個頭文件:Html作爲第二個參數,當在模板級別將模板傳遞到另一個模板時,這通常是傳遞一個Html類型,但是是否可以轉換header.unauthenticated到Html類型?

這些都是我的模板標題:

header.unathenticatedheader:

@()(implicit request: common.request.CanBeAuthenticatedRequest[_]) 

staticpages.index:

@import common.request.CanBeAuthenticatedRequest 

@(title: String = "Welcome to Play")(header: Html)(implicit request: CanBeAuthenticatedRequest[_]) 
+0

我的這個本地版本工作正常 - 您可以發佈相關的代碼的其他人呢? –

+0

@SteveChaloner我已經添加了我的模板的標題,讓我知道如果你需要別的東西,請求類型「CanBeAuthenticatedRequest」也傳遞給索引模板,當索引模板不需要標題參數時,它就會工作我認爲自定義WrappedRequest不是問題。 – vicaba

回答

1

你有幾個選擇這裏。您可以傳遞渲染結果,或者您可以傳遞模板並使其在模板中呈現。

如果您需要將參數傳遞到模板中,最好傳遞結果;如果你傳入無參數模板,這是個人偏好。

傳中,結果

模板:

@(message: String)(myInsert: Html) 

<div>start: @message</div> 
<div> @myInsert </div> 
<div>end</div> 

控制器:

def index = Action { 
    Ok(views.html.index("foo")(views.html.insert())) 
} 

通行證模板

模板:

@(message: String)(myInsert: Template0[play.twirl.api.HtmlFormat.Appendable]) 

<div>start @message</div> 
<div> @myInsert.render() </div> 
<div>end</div> 

控制器:

def index = Action { 
    Ok(views.html.index2("sdf sdf d")(views.html.insert2)) 
} 
+0

嗯......「通過結果」選項是我想要的,但我沒有看到你的代碼和我的代碼之間的區別在哪裏 – vicaba

+0

你肯定會在你的控制器動作中聲明一個「隱式請求」? –

+0

是的,當然。它正在工作。我必須重新啓動激活器。感謝您的關注! – vicaba

相關問題