作为一名专注于个人站长建站效率的技术专家,我深知模板代码复用对于维护和迭代的重要性。在Django框架中,我们不需要重复编写导航栏、页脚或侧边栏等重复组件。实现这一目标的强大工具就是 {% include %} 模板标签。
使用 {% include %} 可以将一个模板文件的全部内容加载到另一个模板的特定位置,极大地提升了模板的模块化和可维护性。
第一步:准备模板文件结构
假设您的项目结构中,主要的模板文件位于 templates/my_app/ 目录下。为了更好地管理被包含的片段,我们通常会创建一个 partials 目录或者使用下划线前缀命名片段文件。
我们创建一个主模板和一个导航栏片段。
# 假设这是您的 templates 目录结构
my_app/templates/
├── index.html # 主页面模板
└── partials/
└── _navbar.html # 导航栏片段
第二步:创建被包含的片段 (_navbar.html)
我们先编写一个简单的导航栏片段。注意,这个片段是完全独立的,不包含完整的 或 标签。
**文件: **my_app/templates/partials/_navbar.html****
<nav class="navbar">
<a href="/">主页</a>
<a href="/blog">博客</a>
<a href="/about">关于我们</a>
<span class="status">当前用户:{{ user_name|default:"访客" }}</span>
</nav>
第三步:在主模板中使用 {% include %}
现在,我们可以在主模板 index.html 中使用 {% include %} 标签来引入导航栏。
**文件: **my_app/templates/index.html****
{% load static %}
<!DOCTYPE html>
<html>
<head>
<title>我的个人网站</title>
</head>
<body>
<!-- 使用 include 标签引入导航栏 -->
{% include 'my_app/partials/_navbar.html' %}
<h1>欢迎来到我的网站!</h1>
<p>这里是页面的主要内容。</p>
<!-- 也可以在页脚包含其他片段,例如页脚版权信息 -->
{% include 'my_app/partials/_footer.html' %}
</body>
</html>
关键点: {% include %} 标签中的路径是相对于您在 settings.py 中配置的 TEMPLATES 路径,通常是相对于应用名称或者顶级 templates 目录开始。
第四步:传递上下文变量给被包含的模板 (使用 with)
默认情况下,被包含的模板会继承主模板的所有上下文变量。但有时我们希望只向片段传递特定的变量,或者使用一个临时的别名,这时可以使用 with 关键字。
假设我们想在 _navbar.html 中显示用户的名字,但主模板中的变量名是 current_user。
在 views.py 中:
# views.py
def homepage(request):
context = {
'page_title': '首页',
'current_user': '站长A'
}
return render(request, 'my_app/index.html', context)
在 index.html 中,我们使用 with 将 current_user 映射到片段中需要的 user_name 变量:
<!-- index.html 片段 -->
{% include 'my_app/partials/_navbar.html' with user_name=current_user %}
<!-- ... 页面其余内容 ... -->
这样,在 _navbar.html 中,{{ user_name }} 就会显示 站长A,而不会影响主模板中 current_user 的使用。
通过掌握 {% include %} 标签,您可以将复杂的网站界面拆分成易于管理和复用的组件,这是高效的个人站长网站开发必备技能。
汤不热吧