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
相关产品推荐
相关产品推荐

