在revel框架中应创建layouts/main.html布局模板并用{{yield}}插入内容,配合partials目录存放_nav.html等可复用区块,页面通过{{template "layouts/main.html" .}}继承并用{{define}}填充各区块,导航推荐用{{template "partials/_nav.html" .}}复用。

在Revel框架中快速构建统一风格的网站,需要避免每个页面都重复写header、footer、导航栏和公共CSS/JS引用——每次改一个链接或版权年份,就得手动翻10个HTML文件,漏改一处就导致线上不一致。
创建基础布局模板
进入app/views目录,新建layouts子目录,在其中创建main.html文件。
在main.html中写入标准HTML结构,用{{yield}}标记内容插入点:
【必须使用双大括号包裹yield,且第二个参数传入.(当前上下文)】漏掉点号会导致变量无法传递,所有页面标题和内容渲染为空。
定义可复用的公共区块
在app/views下新建partials目录,用于存放可被多次包含的片段。
创建partials/_nav.html:。
创建partials/_footer.html:
。这里用Go的date函数动态输出年份,避免每年手动更新。在页面中继承并填充布局
第一步:在具体页面模板顶部声明继承关系,例如app/views/app/index.html开头写:{{set . "title" "首页"}}, 这一步必须放在最前面,否则title不会被main.html捕获。
第二步:用{{template "layouts/main.html" .}}引入基础布局,注意路径是相对app/views的,不加扩展名。
第三步:在布局内部定义各区块内容,用{{define "header"}}
欢迎访问
{{end}}、{{define "content"}}这是首页正文
{{end}}、{{define "footer"}}{{template "partials/_footer.html" .}}{{end}}。这一步操作起来很简单,直接把_footer.html用template包含进来就行,但要注意:不能在{{define}}块外直接写HTML,否则会被忽略。
复用导航栏的两种方法
方法一:在每个页面的{{define "header"}}中手动写
方法二:在{{define "header"}}中调用{{template "partials/_nav.html" .}}——推荐方式,修改_nav.html后所有页面自动同步,且支持传参,比如{{template "partials/_nav.html" (dict "active" "home")}}可让首页菜单高亮。
方法三:在控制器中预设导航数据,如c.RenderArgs["navItems"] = []map[string]string{...},再在_nav.html里range遍历——适合权限控制型导航,不同角色看到不同菜单项。











