You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何为继承扩展的页面添加动态标题?

Django 子页面动态修改base模板标题实现方案

Django原生模板的块(block)机制原生支持这个需求,不需要额外引入插件或写自定义标签,按下面步骤配置即可:

  • 首先修改基础模板base.html的title标签位置,预留独立的title块
    把原来写死的标题替换成block标签,块内可以设置默认兜底标题,避免未单独配置的页面出现空标题:
<!-- base.html <head> 区域 -->
<head>
    <meta charset="UTF-8">
    <!-- 预留title块,默认值为站点通用名 -->
    <title>{% block title %}我的个人站点{% endblock %}</title>
    <!-- 其他css、js引用保持原有写法不变 -->
</head>
<body>
    <!-- 原有content块保留不动 -->
    {% block content %}{% endblock %}
</body>

如果需要给所有页面标题统一加固定后缀/前缀,可以直接写在title块外面,比如<title>{% block title %}我的个人站点{% endblock %} - 技术博客</title>,后续子页面只需要配置自身的差异化标题部分,固定后缀会自动拼接,不用每个页面重复写。

  • 在各个继承base.html的子页面中,单独覆写title块即可
    title块和content块是平级关系,直接写在{% extends %}标签下方,不需要嵌套在content块里,渲染时Django会自动把两个块的内容填充到base模板的对应位置。
    比如首页模板的写法:
<!-- index.html -->
{% extends "base.html" %}

<!-- 单独配置当前页标题 -->
{% block title %}网站首页{% endblock %}

{% block content %}
<!-- 原有首页内容完全不用改 -->
<h1>欢迎访问我的站点</h1>
{% endblock %}

如果是带动态数据的页面(比如文章详情页),直接把模板变量插到title块里就行,和在content里写变量的逻辑完全一致:

<!-- article_detail.html -->
{% extends "base.html" %}

{% block title %}{{ article.title }} - 文章详情{% endblock %}

{% block content %}
<h1>{{ article.title }}</h1>
<div class="article-content">{{ article.content|safe }}</div>
{% endblock %}

注意事项

  • title块不要嵌套在content块内部,两个块是独立的平级块,书写顺序不影响最终渲染结果
  • 如果某个子页面需要复用父模板的默认标题,直接省略title块即可;需要在父标题基础上追加内容的话,可以在title块里用{{ block.super }}引用父块内容,不用重复写固定文案
  • 配置完成后如果标题不生效,优先检查子页面是否正确添加了{% extends "base.html" %}标签,以及block名称是否和base里定义的完全一致(注意大小写,不要出现{% block Title %}这类拼写错误)

内容的提问来源于stack exchange,提问作者Ashwin John Dibu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:36:22