如何设计一个基础模板并让其他页面继承它?

📅 👁️ 79

在安企CMS中构建网站,高效而灵活的模板设计是提升开发效率和保持网站一致性的关键。其中,设计一个基础模板并让其他页面继承它,是实现这一目标的核心策略。安企CMS采用了类似Django模板引擎的语法,这使得模板继承变得直观且功能强大。

奠定基石:创建你的基础模板

首先,我们来创建一个网站的基础骨架模板。在安企CMS中,所有的模板文件都存放在 /template 目录下,每个主题都有自己的独立文件夹。例如,如果你的主题名为 mytheme,那么模板路径就是 /template/mytheme/

在这个主题文件夹内,通常我们会创建一个名为 bash.html(或任何你喜欢的名称,约定俗成地,这是一个基础布局文件)的文件作为所有页面的公共基础。这个文件包含了网站的整体结构,比如 <head> 区块、顶部导航、页脚等,而将页面中会根据不同内容变化的区域定义为可供继承页面修改的“区块”。

bash.html 中,我们使用 {% block 你的区块名称 %}{% endblock %} 这样的标签来定义这些可变区域。例如:

<!DOCTYPE html>
<html lang="{% system with name='Language' %}">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 页面TDK信息,这些标签会根据当前页面自动获取,如果当前页未设置,则获取后台配置的首页TDK -->
    <title>{% tdk with name="Title" siteName=true %}</title>
    <meta name="keywords" content="{% tdk with name="Keywords" %}">
    <meta name="description" content="{% tdk with name="Description" %}">
    {%- tdk canonical with name="CanonicalUrl" %}
    {%- if canonical %}
    <link rel="canonical" href="{{canonical}}" />
    {%- endif %}

    <!-- 引入网站的样式文件,TemplateUrl 会指向当前模板文件夹的静态资源路径 -->
    <link rel="stylesheet" href="{% system with name='TemplateUrl' %}/css/style.css">
    {% block head_extra %}{% endblock %} {# 预留给子页面添加额外的头部内容,如特定页面的CSS/JS #}
</head>
<body>
    <header class="site-header">
        <div class="container">
            <!-- 网站Logo和名称 -->
            <a href="{% system with name='BaseUrl' %}" class="logo">
                <img src="{% system with name='SiteLogo' %}" alt="{% system with name='SiteName' %}">
            </a>
            <!-- 导航菜单 -->
            <nav class="main-nav">
                {% navList navs %}
                <ul>
                    {% for item in navs %}
                    <li class="{% if item.IsCurrent %}active{% endif %}">
                        <a href="{{ item.Link }}">{{ item.Title }}</a>
                        {% if item.NavList %}
                        <ul class="sub-nav">
                            {% for subItem in item.NavList %}
                            <li class="{% if subItem.IsCurrent %}active{% endif %}">
                                <a href="{{ subItem.Link }}">{{ subItem.Title }}</a>
                            </li>
                            {% endfor %}
                        </ul>
                        {% endif %}
                    </li>
                    {% endfor %}
                </ul>
                {% endnavList %}
            </nav>
        </div>
    </header>

    <main class="site-main">
        <div class="container">
            {% block main_content %}
                <!-- 这里的默认内容,如果子页面不重写此block,则会显示 -->
                <p>这是基础模板的默认内容区域。</p>
            {% endblock %}
        </div>
    </main>

    <footer class="site-footer">
        <div class="container">
            <p>{% system with name="SiteCopyright" %}</p>
            <p><a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">{% system with name="SiteIcp" %}</a></p>
            <address>
                联系人:{% contact with name="UserName" %} | 电话:{% contact with name="Cellphone" %} | 邮箱:{% contact with name="Email" %}
            </address>
        </div>
    </footer>

    <!-- 引入网站的JavaScript文件 -->
    <script src="{% system with name='TemplateUrl' %}/js/main.js"></script>
    {% block body_extra %}{% endblock %} {# 预留给子页面添加额外的脚本 #}
</body>
</html>

可以看到,在这个 bash.html 模板中,我们使用了多个安企CMS的内置标签:

  • {% system with name="..." %}:获取网站全局配置,如语言、网站名称、Logo、备案号、基础URL、模板静态资源路径等。
  • {% tdk with name="..." %}:动态获取当前页面的SEO标题、关键词和描述,确保每个页面都有优化过的TDK信息。
  • {% navList navs %}:生成网站的主导航菜单。
  • {% contact with name="..." %}:获取网站的联系方式,方便在页脚等处展示。
  • {% block ... %}{% endblock %}:定义了 head_extramain_contentbody_extra 三个区块,这些是子页面可以覆盖或扩展的地方。

模块化构建:使用 include 标签

除了基础模板的继承,安企CMS还提供了 {% include "你的片段文件.html" %} 标签,用于引入一些小的、可复用的代码片段。这些片段通常不包含完整的HTML结构,而是像侧边栏、面包屑导航、广告位等,可以在多个页面中独立地插入。

例如,我们可以在 partial 目录下创建 sidebar.htmlbreadcrumb.html

/template/mytheme/partial/breadcrumb.html:

<div class="breadcrumb">
    {% breadcrumb crumbs with index="首页" title=true %}
    {% for item in crumbs %}
        {% if forloop.Counter < forloop.Length %}
        <a href="{{item.Link}}">{{item.Name}}</a> &gt;
        {% else %}
        <span>{{item.Name}}</span>
        {% endif %}
    {% endfor %}
    {% endbreadcrumb %}
</div>

然后在 bash.html 或其他子模板中,你可以在 main_content 区块内部使用 {% include "mytheme/partial/breadcrumb.html" %} 来引入它。include 标签可以帮助我们更好地组织模板文件,减少重复代码。

继承与重写:其他页面的实现

现在,当我们需要创建网站的首页、文章详情页、分类列表页等具体页面时,就不需要从头编写完整的HTML结构了。我们只需要让这些页面继承 bash.html,然后根据需要重写相应的 block 区块即可。

在任何一个子模板文件的**第一

相关文章

如何创建可复用的模板代码片段(宏)?

在安企CMS的日常内容运营中,我们常常会遇到一些需要反复使用的界面元素或代码结构。例如,一个标准化的文章列表项、一个统一风格的产品展示卡片,或者一个带有特定排版信息的页脚联系方式。如果每次都手动编写这些代码,不仅效率低下,还容易出现格式不一致的问题。这时,安企CMS提供的“宏”(Macro)功能就显得尤为重要,它能帮助我们轻松创建可复用的模板代码片段,大幅提升模板开发的效率和代码质量。 ###

2025-11-09

如何引入公共的头部、底部或侧边栏模板文件?

在安企CMS构建网站时,我们经常会遇到这样的需求:页面的头部(Header)、底部(Footer)或侧边栏(Sidebar)在多个页面中重复出现。如果每次都复制代码,不仅效率低下,后续维护和更新也会变得异常复杂。幸运的是,安企CMS基于Go语言开发,其模板引擎支持类似Django的语法,提供了非常灵活且强大的方式来引入这些公共模板文件,帮助我们实现内容的高效管理和维护

2025-11-09

如何在模板中定义和使用自定义变量?

在网站运营中,我们常常需要展示多样化的内容,这些内容可能包含系统预设的数据,也可能涉及根据业务需求定制的个性化信息。安企CMS(AnQiCMS)深知这一需求,提供了灵活多样的机制,让您能够在模板中轻松定义和使用自定义变量,从而实现内容的精准控制与个性化展示。 本文将带您深入了解在AnQiCMS模板中定义和使用自定义变量的各种方法,助您充分利用这些功能,打造更具表现力和实用性的网站。 ###

2025-11-09

如何实现长文本的自动换行显示?

在网站内容运营中,我们经常会遇到需要展示大量文本的情况,如果这些长文本没有得到妥善处理,很可能会超出设计好的容器,导致页面布局混乱,严重影响用户体验。安企CMS为我们提供了灵活且强大的模板功能,可以轻松解决长文本的显示问题,特别是实现自动换行。 ### 核心策略:利用 `wordwrap` 过滤器实现文本自动换行 安企CMS的模板系统内置了许多实用的过滤器(Filters),其中

2025-11-09

如何显示当前站点的多语言切换选项?

在安企CMS中,如何便捷地为网站添加多语言切换选项? 随着全球化趋势的不断深入,许多企业和内容运营者发现,拥有一个支持多语言的网站是拓展市场、服务不同地区用户的关键。安企CMS深知这一需求,因此内置了强大的多语言支持功能,让您能够轻松地管理和展示不同语言的内容。 当您的网站内容已经准备好多语言版本后,下一步自然是为访问者提供一个直观的语言切换器。这不仅能提升用户体验

2025-11-09

如何在模板中添加hreflang标签以支持多语言SEO?

随着全球化趋势日益增强,许多网站都面临着为不同语言或地区的用户提供内容的挑战。为了确保您的多语言网站在搜索引擎中获得**表现,并准确地将用户引导至其偏好语言版本,添加 `hreflang` 标签是至关重要的一步。安企CMS(AnQiCMS)作为一款深度支持多语言的企业级内容管理系统,提供了便捷的方式来在模板中实现这一功能。 ### 理解 hreflang 标签的作用 `hreflang`

2025-11-09

如何显示网站中配置的动态Banner图片列表?

网站的Banner区域,如同一个动态的宣传窗口,它的视觉吸引力和内容传达效率,直接影响着访客对网站的第一印象。一个精心设计的Banner,能够迅速抓住用户目光,有效地展示品牌形象、最新活动或核心产品。在AnQiCMS(安企CMS)中,利用其强大的内容管理功能,您可以轻松实现动态Banner图片列表的配置与展示,让您的网站始终保持新鲜感和吸引力。 ###

2025-11-09

如何展示或自定义网站的错误页面(如404、500)和闭站提示?

在网站运营中,访客可能会因为各种原因遇到找不到的页面或者服务器暂时性的问题,甚至可能在网站进行维护升级时无法访问。面对这些情况,一个设计得当的错误页面(如404、500)和友好的闭站提示,不仅能大幅提升用户体验,还能在一定程度上维护网站的专业形象和搜索引擎优化(SEO)。安企CMS作为一个高效的内容管理系统,提供了灵活的方式来展示和自定义这些重要的页面。 ###

2025-11-09