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

Django多应用模板文件夹配置:分设/集中方案及settings设置疑问

Django多应用模板管理指南

核心结论

完全可以在每个应用内单独创建template文件夹,这是Django官方推荐的模块化开发方式,比集中放置更便于应用的独立维护和复用。当然你也可以选择集中放置,但分文件夹的方案更适配多应用场景。

配置settings.py的关键步骤

要让Django识别各应用的模板文件夹,只需确保以下两点:

  1. 将所有应用加入INSTALLED_APPS
    打开项目根目录的settings.py,把你的每个应用(比如blog、shop)添加到INSTALLED_APPS列表中,示例:
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # 自定义应用
        'blog',
        'shop',
    ]
    
  2. 开启应用模板目录扫描
    在settings.py的TEMPLATES配置中,确保APP_DIRS设为True,这样Django会自动遍历INSTALLED_APPS里每个应用的templates文件夹:
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [BASE_DIR / 'templates'],  # 可选:主项目全局模板目录
            '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',
                ],
            },
        },
    ]
    
    注:DIRS用于存放全局共享模板(比如全站通用的base.html),如果不需要可以留空列表。

解决模板冲突:访问不同应用的模板

你遇到的"始终跳转同一HTML文件"问题,大概率是因为不同应用的模板文件名重复。Django会按照INSTALLED_APPS的顺序查找模板,先找到的同名文件会被优先使用。

解决方法很简单:在每个应用的templates文件夹下,再创建一个与应用同名的子文件夹,把模板文件放在这个子文件夹里。

示例结构

假设你有两个应用blog和shop:

myproject/
├── blog/
│   ├── templates/
│   │   └── blog/  # 与应用同名的子文件夹
│   │       └── index.html
│   └── views.py
├── shop/
│   ├── templates/
│   │   └── shop/
│   │       └── index.html
│   └── views.py
└── myproject/
    └── settings.py

在视图中引用模板

在视图里通过应用名/模板文件名的方式指定模板,就不会冲突了:

# blog/views.py
from django.shortcuts import render

def blog_home(request):
    return render(request, 'blog/index.html')

# shop/views.py
from django.shortcuts import render

def shop_home(request):
    return render(request, 'shop/index.html')

最后配置对应的URL路由,访问不同的URL就能加载对应应用的模板文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:25:17