給定一個名爲你好名爲世界動作控制器,狂歡將尋找一個模板文件命名視圖/你好/ World.html。
有沒有辦法在Revel中使用相同的模板和不同的動作?類似名爲World和World2的動作使用views/Hello/World.html。
給定一個名爲你好名爲世界動作控制器,狂歡將尋找一個模板文件命名視圖/你好/ World.html。
有沒有辦法在Revel中使用相同的模板和不同的動作?類似名爲World和World2的動作使用views/Hello/World.html。
我檢查了陶醉的源代碼,我不認爲你可以這樣做。
這裏是控制器的渲染功能,只是看到最後一行:
func (c *Controller) Render(extraRenderArgs ...interface{}) Result {
// Get the calling function name.
_, _, line, ok := runtime.Caller(1)
if !ok {
ERROR.Println("Failed to get Caller information")
}
// Get the extra RenderArgs passed in.
if renderArgNames, ok := c.MethodType.RenderArgNames[line]; ok {
if len(renderArgNames) == len(extraRenderArgs) {
for i, extraRenderArg := range extraRenderArgs {
c.RenderArgs[renderArgNames[i]] = extraRenderArg
}
} else {
ERROR.Println(len(renderArgNames), "RenderArg names found for",
len(extraRenderArgs), "extra RenderArgs")
}
} else {
ERROR.Println("No RenderArg names found for Render call on line", line,
"(Action", c.Action, ")")
}
//templatePath = c.Name + "/" + c.MethodType.Name + "." + c.Request.Format
return c.RenderTemplate(c.Name + "/" + c.MethodType.Name + "." + c.Request.Format)
} RenderTemplate的
和源代碼:
func (c *Controller) RenderTemplate(templatePath string) Result {
// Get the Template.
template, err := MainTemplateLoader.Template(templatePath)
if err != nil {
return c.RenderError(err)
}
return &RenderTemplateResult{
Template: template,
RenderArgs: c.RenderArgs,
}
}
GitHub的鏈接here。
也許你可以只創建World.html
的別名文件如何通過vars渲染模板? – pregmatch
@pregmatch,渲染函數需要extraRenderArgs,這是你的意思是關於pass vars? – chendesheng
是的是用c.Args [「somevar」] = var解決了這個問題。謝謝 – pregmatch
只要指定你的行動通過RenderTemplate通用模板():
func (c *Con) ActionA() revel.Result {
return c.RenderTemplate("the view path");
}
如何通過vars渲染模板? – pregmatch
您可以嘗試類似這樣:
func (c App) New() revel.Result {
var event models.Event
event.Start_Year = time.Now().Year()
c.RenderArgs["event"] = event
return c.RenderTemplate("app/edit.html")
}
沒有答案,但符號鏈接將有所幫助。 – OneOfOne