欢迎光临
我们一直在努力

django模板中如何再包含另一个模板

作为一名专注于个人站长建站效率的技术专家,我深知模板代码复用对于维护和迭代的重要性。在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 中,我们使用 withcurrent_user 映射到片段中需要的 user_name 变量:

<!-- index.html 片段 -->

{% include 'my_app/partials/_navbar.html' with user_name=current_user %}

<!-- ... 页面其余内容 ... -->

这样,在 _navbar.html 中,{{ user_name }} 就会显示 站长A,而不会影响主模板中 current_user 的使用。

通过掌握 {% include %} 标签,您可以将复杂的网站界面拆分成易于管理和复用的组件,这是高效的个人站长网站开发必备技能。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » django模板中如何再包含另一个模板
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址