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

Django中应用模板如何扩展项目级目录下的base.html?

解决App1模板扩展项目根templates中base.html的问题

嘿,我来帮你搞定这个模板扩展的小问题!你之前用{% extends '/base.html' %}没生效,主要是没摸透Django的模板查找规则,咱们一步步来:

第一步:先确认项目settings的模板配置

首先得保证你的项目settings.py里的TEMPLATES配置,已经把根目录下的templates加进DIRS列表了,不然Django根本不会去这个目录找模板。配置应该长这样:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 关键在这里!BASE_DIR是项目根目录,指向根templates
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,  # 这个要保持True,这样才会找app里的模板
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

第二步:正确使用extends标签

配置好之后,你在App1的模板里直接写下面这句就行,不要加开头的斜杠:

{% extends "base.html" %}

Django会先去你配置的根templates目录找base.html,找不到才会去App1自己的templates/App1目录里找,这样就刚好命中你要的全局base模板了。

为啥之前的写法不行?

你用的{% extends '/base.html' %}里的斜杠,在Django模板路径里是无效的——Django的模板路径不是文件系统的绝对路径,而是相对于你配置的所有模板目录的相对路径,开头加斜杠反而会让它找不到正确的文件。

如果之后你的根templates里有子目录(比如templates/layout/base.html),那直接写{% extends "layout/base.html" %}就可以了,逻辑是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:23:44