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

Django是否仅认可templates作为模板文件夹名?如何自定义?

Django自定义模板文件夹名的解决方案

Django并非只能使用templates作为模板文件夹名,完全可以自定义为用户易懂的名称,只是默认的模板查找逻辑会优先识别应用内的templates目录,所以改名后需要调整配置让Django识别自定义目录。

问题原因

你修改了根目录的模板文件夹名并更新了DIRS配置,这部分能被Django的文件系统加载器识别;但应用内的自定义模板文件夹(main/somethingElse),默认的应用目录加载器只会查找应用下的templates目录,所以无法被识别。

解决方法

方法1:手动添加应用内的自定义模板目录到DIRS

这是最直观的方案,适合教学场景,容易理解:
在settings.py的TEMPLATES配置中,把应用内的自定义模板目录直接加入DIRS列表:

# settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            BASE_DIR / 'somethingElse',  # 根目录的自定义模板文件夹
            BASE_DIR / 'main' / 'somethingElse',  # main应用内的自定义模板文件夹
            # 如有其他应用,按同样格式添加它们的自定义模板目录
        ],
        'APP_DIRS': True,
        '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',
            ],
        },
    },
]

配置后,Django会从这些指定路径中查找模板文件。

方法2:自定义应用目录加载器,统一指定模板文件夹名

如果有多个应用,不想逐个添加目录,可以修改加载器配置,让Django自动查找所有应用下的自定义模板目录:

# settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            BASE_DIR / 'somethingElse',  # 根目录的自定义模板文件夹
        ],
        'APP_DIRS': False,  # 关闭默认的应用templates目录查找
        'OPTIONS': {
            'loaders': [
                # 自定义应用目录加载器,指定模板目录名为somethingElse
                ('django.template.loaders.app_directories.Loader', {
                    'dirs': ['somethingElse'],
                }),
                'django.template.loaders.filesystem.Loader',
            ],
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

这样配置后,所有已安装应用下的somethingElse目录都会被自动扫描,无需逐个添加路径。

注意事项

  • 模板继承的语法不需要修改,比如原来的{% extends 'base.html' %}依然有效,因为根目录的自定义模板文件夹已加入DIRS,base.html能被正常找到。
  • 检查自定义文件夹的路径拼写是否正确,可通过print(BASE_DIR / 'main' / 'somethingElse')输出路径,确认目录实际存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:47:42