0

狂欢手册说:

给定一个名为 Hello 的控制器和一个名为 World 的操作,Revel 将查找名为 views/Hello/World.html 的模板文件。

有没有办法在 Revel 中使用具有不同操作的相同模板?与名为 World 和 World2 的操作类似,使用 views/Hello/World.html。

4

3 回答 3

1

您可以尝试类似的方法:

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")
}
于 2015-06-22T14:44:12.847 回答
0

只需在您的操作中通过 RenderTemplate() 指定通用模板:

func (c *Con) ActionA() revel.Result {
    return c.RenderTemplate("the view path");
}
于 2014-11-19T12:36:40.970 回答
0

我检查了 revel 的源代码,我认为你不能这样做。

这里是Controller的Render函数,看最后一行:

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链接在这里

也许你可以创建一个 World.html 的别名文件

于 2014-07-14T11:40:43.430 回答