这个说法通常有两种理解,我会分别进行阐述:

(图片来源网络,侵删)
- 模板本身没有数据,需要通过动态调用(标签)来获取并显示数据。 (这是最常见、最核心的含义)
- 一个静态的、独立的HTML文件,不包含任何DedeCMS的标签。 (通常是用于制作静态页面或作为前端开发的基础)
下面我们重点讲解第一种,因为它与DedeCMS的核心工作方式紧密相关。
核心概念:模板(HTML)与数据(数据库)的分离
DedeCMS(织梦内容管理系统)的核心思想就是 “模板与数据分离”。
- 模板: 就是一个纯粹的HTML文件,里面包含了网站的样式、布局和结构,但它本身是“空”的,没有实际的内容。
- 数据: 存储在网站数据库里的信息,比如文章标题、文章内容、产品图片、用户评论等。
- DedeCMS的模板引擎定义的特殊代码,用来在模板中“挖坑”,告诉系统“这里需要从数据库里获取什么数据,并以什么格式显示出来”。
一个不带数据的模板,就是一个只有HTML结构和标签占位符,但没有真实内容的文件。
如何制作和使用一个“不带数据的模板”?
这个过程可以分为三个步骤:制作静态HTML -> 制作模板文件 -> 填充数据标签。

(图片来源网络,侵删)
第1步:制作一个静态的HTML页面
你可以用任何你喜欢的方式(如Dreamweaver、VS Code、Sublime Text,甚至手写)制作一个完整的、看起来很漂亮的静态HTML页面。
示例:index.html (一个静态首页)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">我的网站首页</title>
<link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
<header>
<div class="logo">我的Logo</div>
<nav>
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">产品展示</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
</header>
<main>
<section class="banner">
<!-- 这里是轮播图 -->
<img src="/static/images/banner1.jpg" alt="Banner">
</section>
<section class="news-list">
<h2>最新资讯</h2>
<ul>
<li>
<a href="#">这里是文章标题一,需要替换成动态的</a>
<span>2025-10-27</span>
</li>
<li>
<a href="#">这里是文章标题二,也需要替换成动态的</a>
<span>2025-10-26</span>
</li>
<li>
<a href="#">这里是文章标题三,同样需要替换</a>
<span>2025-10-25</span>
</li>
</ul>
</section>
<section class="products">
<h2>产品推荐</h2>
<div class="product-grid">
<div class="product-item">
<img src="/static/images/product1.jpg" alt="产品1">
<h3>产品名称一</h3>
<p>产品简介一,需要动态获取...</p>
</div>
<div class="product-item">
<img src="/static/images/product2.jpg" alt="产品2">
<h3>产品名称二</h3>
<p>产品简介二,需要动态获取...</p>
</div>
</div>
</section>
</main>
<footer>
<p>© 2025 我的网站 版权所有</p>
</footer>
</body>
</html>
这个 index.html 就是一个 “不带数据的模板” 的雏形,它有完整的结构,但内容都是写死的。
第2步:将静态HTML转换为DedeCMS模板文件
你需要将这个HTML文件放到DedeCMS指定的模板目录下,通常是 /templets/你的模板文件夹名/。

(图片来源网络,侵删)
假设你的模板文件夹叫 mydemo,那么就把 index.html 放到 /templets/mydemo/ 目录下。
为了方便管理,通常会拆分成多个文件,
index.htm(首页主模板)head.htm(头部模板)footer.htm(底部模板)article_list.htm(文章列表页模板)
第3步:用DedeCMS标签替换静态内容
这是最关键的一步,你需要在模板文件中,用DedeCMS的标签去替换那些需要动态显示的内容。
修改后的 index.htm (DedeCMS模板)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">{dede:global.cfg_webname/}</title> <!-- 使用全局变量替换网站标题 -->
<link rel="stylesheet" href="/static/css/style.css">
{dede:include filename="head.htm"/} <!-- 引入头部公共模板 -->
</head>
<body>
<main>
<section class="banner">
<!-- 调用一个幻灯片标签,通常需要配合JS和CSS -->
{dede:arclist flag='h' row='5'}
<img src="[field:litpic/]" alt="[field:title/]">
{/dede:arclist}
</section>
<section class="news-list">
<h2>最新资讯</h2>
<ul>
<!-- 调用文章列表标签,获取最新5条文章 -->
{dede:arclist row='5' titlelen='30'}
<li>
<!-- [field:title/] 是一个字段标签,表示文章标题 -->
<a href="[field:arcurl/]">[field:title/]</a>
<!-- [field:pubdate/] 是发布日期,通过function格式化 -->
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
</ul>
</section>
<section class="products">
<h2>产品推荐</h2>
<div class="product-grid">
<!-- 调用自定义模型列表,例如调用产品模型 -->
{dede:arclist row='2' channelid='3'} <!-- 假设产品模型的ID是3 -->
<div class="product-item">
<!-- [field:picname/] 是缩略图 -->
<img src="[field:picname/]" alt="[field:title/]">
<h3>[field:title/]</h3>
<!-- [field:description/] 是简介 -->
<p>[field:description function='cn_substr(@me, 100)'/]...</p> <!-- 截取100个字符 -->
</div>
{/dede:arclist}
</div>
</section>
</main>
{dede:include filename="footer.htm"/} <!-- 引入底部公共模板 -->
</body>
</html>
常用标签解释:
{dede:global.cfg_webname/}: 获取网站后台设置的网站名称。{dede:include filename='head.htm'/}: 包含另一个模板文件,用于复用头部、底部等公共代码。{dede:arclist ...}: 文章列表标签,最核心的标签之一,用于调用文章列表。row='5': 显示5条记录。titlelen='30': 标题长度限制为30个字符。channelid='3': 调指定模型频道的内容。
[field:title/]: 字段标签,在循环内部使用,用于显示当前记录的某个字段,如标题。[field:arcurl/]: 显示当前记录的链接地址。[field:pubdate function="MyDate('Y-m-d',@me)"/]: 对字段进行处理,这里是将发布日期格式化为“年-月-日”。[field:litpic/]: 获取文章的缩略图。
| 特性 | 不带数据的模板 (DedeCMS模板) | 静态HTML文件 |
|---|---|---|
| 本质 | 一个包含标签占位符的HTML文件 | 一个包含的HTML文件 |
| 可维护性 | 高,修改后台数据,前端页面自动更新。 | 低,需要手动修改每个HTML文件。 |
| 使用场景 | DedeCMS网站的所有页面(首页、列表页、内容页等)。 | 网站设计稿、制作静态展示页、作为模板开发的基础。 |
一个“不带数据的模板”就是DedeCMS的“半成品”。 你先设计好网站的“骨架”(HTML和CSS),然后通过在骨架上“植入”DedeCMS的标签({dede:...}和[field:...]),告诉系统从哪里获取“血肉”(数据库内容),最终由DedeCMS引擎将这些“血肉”填充到“骨架”中,生成最终用户看到的完整网页。
