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

Pug模板扩展head块后内容为何生成到body中?

问题原因与解决方案

核心错误

你在header.pug里犯了关键错误:把页面的header可视化结构(.container和<header>元素)直接写到了append head块中。而head块是嵌套在HTML的<head>标签内的,浏览器解析时会发现<head>里不允许放置这类可视化DOM元素,自动将它们移到<body>内,这就导致了布局异常。

正确实现方式

要达成“部分页面显示header,部分不显示”的需求,需要把header的HTML结构和head块的脚本追加拆分开,步骤如下:

1. 修改layout.pug,新增专属header块

在<body>内添加一个空的header块,用来承载页面的header结构:

doctype html
html
  head
    block head
      title= title      
      link(rel='stylesheet', href='/css/bootstrap/bootstrap.min.css')
      script(type='text/javascript' src='https://cdn.jsdelivr.net/npm/jquery@3.6.1/dist/jquery.min.js')    
      script(type='text/javascript' src='/js/lodash/lodash.js')
      script(type='text/javascript' src='/js/popper/popper.min.js')      
      script(type='text/javascript' src='/js/bootstrap/bootstrap.js')

  
  - var bodyClasses = [];
  block beforeBody 

  body(class=bodyClasses)
    block header  // 新增此块,专门放置页面header结构
    block content

2. 重构header.pug,拆分内容到对应块

让header.pug只在head块追加脚本,同时填充新增的header块:

extends layout

// 仅在head中追加脚本,不放置可视化结构
append head 
    script(type='module' src="../javascripts/controllers/headerController.js")

// 将header的HTML结构放入专属的header块
block header
    .container
        header.d-flex.flex-wrap.align-items-center.justify-content-center.justify-content-md-between.py-3.mb-4.border-bottom 
            a.btn.btn-primary.btn-sm Hello
            .col-md-3.text-end 
                button.btn.btn-sm.btn-light#logOutBtn(type='button') Logout

3. 页面文件使用方式不变

需要显示header的页面扩展header.pug即可;不需要header的页面直接扩展layout.pug:

extends header

append head
    script(type='module' src="./javascripts/controllers/adminController.js")

block beforeBody 
    - bodyClasses.push('bg-dark')
    - bodyClasses.push('py-3')
    - bodyClasses.push('text-white')

block content
 //page goes here

补充提示

  • head块仅能放置<title>、<script>、<link>这类HTML头部专属元素,不能放页面可视化DOM结构。
  • 通过独立的header块,你可以灵活控制页面是否显示header:需显示则扩展header.pug,无需显示则直接扩展layout.pug。

内容的提问来源于stack exchange,提问作者Jesse Finnegan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:05:35