📄 内容详情
最后更新:2026-10-02
⚠️ 关键约束(必读)
详情页所有字段必须加对象前缀,不能直接写 .Title:
- 文章:
{{.News.Title}}/{{.News.Content}} - 产品:
{{.Product.Title}}/{{.Product.Content}} - 案例:
{{.Case.Title}}/{{.Case.Content}} - 单页:
{{.Page.Title}}/{{.Page.Content}} - 自定义模型:统一对象
{{.Item.Title}}/{{.Item.Content}}(字段名由后台模型决定,见下方专章)
自定义内容模型(后台「内容模型」自建,数据表 model_xxx)的详情页不区分类型前缀,所有字段都挂在 .Item 下;其扩展字段(如证书号、适用范围)以 .Item.Ext 有序列表平铺(每项 .Label / .Value)。
⚙️ 链接与标题由后台配置决定:产品 / 案例详情页的「外链跳转地址」字段用 {{.Product.Url}} / {{.Case.Url}}(注意是大写 U 的 Url,不是 URL;详情页与列表页字段名不一致,见下方各表);页面 <title> 用 {{.PageTitle}}(按后台「标题样式」拼好)。⚠️ 新闻 / 单页详情没有 .Url 字段(自身即详情页,无需自链),上下篇导航请用 {{.PrevNews}} / {{.NextNews}} 或面包屑 {{.Breadcrumbs}};不要写 {{.News.URL}} / {{.Page.URL}}(为空,列表页 / one 函数才有 .URL)。
📰 文章详情(news_detail.html)
<h1>{{.News.Title}}</h1>
{{if .News.Thumbnail}}<img src="{{.News.Thumbnail}}" alt="{{.News.Title}}">{{end}}
<div class="content">{{.News.Content}}</div>
<time>{{formatDate .News.CreatedAt "Y-m-d"}}</time>
{{if .News.Video}}<video src="{{.News.Video}}" controls></video>{{end}}
📦 产品详情(product_detail.html)
价格 Price 仅在详情页有;列表页无 Price。
<h1>{{.Product.Title}}</h1>
{{if .Product.Thumbnail}}<img src="{{.Product.Thumbnail}}" alt="{{.Product.Title}}">{{end}}
<div class="content">{{.Product.Content | safeHTML}}</div>
<div class="product-gallery">
{{range splitJSON .Product.Images}}
<img src="{{.}}" alt="" loading="lazy">
{{end}}
</div>
{{if .Product.Price}}<div class="product-price">价格:¥{{.Product.Price}}</div>{{end}}
<time>发布时间:{{formatDate .Product.CreatedAt "Y-m-d"}}</time>
📋 案例详情(case_detail.html)
Client 客户名称、ProjectDate 项目日期仅在详情页有。
<h1>{{.Case.Title}}</h1>
<p>客户:{{.Case.Client}}</p>
<p>日期:{{formatDate .Case.ProjectDate "Y-m-d"}}</p>
<div class="content">{{.Case.Content | safeHTML}}</div>
📄 单页详情(page_detail.html)
<h1>{{.Page.Title}}</h1>
{{if .Page.Image}}<img src="{{.Page.Image}}" alt="{{.Page.Title}}">{{end}}
<div class="content">{{.Page.Content | safeHTML}}</div>
🧩 自定义内容模型详情(model_detail.html) NEW
后台「内容模型」里自建的模型(数据表 model_<code>,如证书 certificate),其详情走独立路由 /m/<code>/<id>(code 即模型编码或 url_name),默认渲染 model_detail.html。与系统模型不同,自定义模型所有字段统一挂在 .Item 对象下,没有类型前缀。
通用变量:{{.ModelName}}(模型名称)、{{.PageTitle}}(页面标题)、{{.Breadcrumbs}}(面包屑,range 得 .url / .name)。
<!-- model_detail.html:自定义模型详情 -->
<h1>{{.Item.Title}}</h1>
{{if .Item.Summary}}<p>{{.Item.Summary}}</p>{{end}}
{{if .Item.Image}}<img src="{{.Item.Image}}" alt="{{.Item.Title}}">{{end}}
<div class="content">{{.Item.Content | safeHTML}}</div>
<!-- 后台定义的扩展字段(有序平铺,推荐用此方式) -->
{{if .Item.Ext}}
<table>
{{range .Item.Ext}}<tr><th>{{.Label}}</th><td>{{.Value}}</td></tr>{{end}}
</table>
{{end}}
<!-- 也可直接按列名取(需后台该模型已定义此字段) -->
{{if .Item.cert_no}}<p>证书号:{{.Item.cert_no}}</p>{{end}}
⚠️ 自定义模型的字段名由后台「内容模型 → 模型字段」决定,模板里用 {{.Item.字段名}} 取;扩展字段建议统一用 .Item.Ext 遍历(前台已按后台定义顺序排好 .Label/.Value),避免硬编码列名。后台可在模型里设置「详情页模板」覆盖默认的 model_detail.html;栏目页进入该模型的链接见「当前栏目」章节的 自定义内容模型栏目。
Gitl.cn云建站 SaaS