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

Windows 10 IIS部署Django后静态文件无法加载的解决求助

在Windows 10 IIS服务器部署Django应用后静态文件无法加载的问题

我在Windows 10的IIS服务器上部署了Django应用,应用本身运行正常,但静态文件始终无法加载。以下是我的相关配置:

Web.config配置

<appSettings>
    <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
    <add key="PYTHONPATH" value="E:\django\crm\crm\crm" />
    <add key="DJANGO_SETTINGS_MODULE" value="crm.settings" />
</appSettings>

<system.webServer>
    <handlers>
        <remove name="crm" />
        <add name="crm" path="*" verb="*" modules="FastCgiModule" scriptProcessor="E:\django\crm\crm\crm\env\Scripts\python.exe|E:\django\crm\crm\crm\env\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
</system.webServer>
</configuration>

IIS添加网站配置

添加网站配置截图

FASTCGI设置

FASTCGI设置截图

处理程序映射

处理程序映射截图

settings.py配置

from pathlib import Path
import os
BASE_DIR = Path(__file__).resolve().parent.parent
DEBUG = False
ALLOWED_HOSTS = ['192.168.11.59','127.0.0.1']

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'base.apps.BaseConfig',

    'dbbackup',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'crm.urls'

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',
            ],
        },
    },
]

WSGI_APPLICATION = 'crm.wsgi.application'
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Kolkata'
USE_I18N = True
USE_TZ = True

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'staticfiles')
STATICFILES_DIRS = [BASE_DIR /'static']

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

我已经正确配置了STATIC_URL、STATIC_ROOT以及urls.py,但静态文件还是无法加载,求解决方法。


解决方法

1. 确认静态文件已收集到位

在项目虚拟环境中执行python manage.py collectstatic命令,确保所有应用的静态文件都被复制到STATIC_ROOT指定的staticfiles目录中。执行后检查该目录是否包含css、js、图片等所有需要的静态资源。

2. 修改Web.config,让IIS直接处理静态文件请求

当前Web.config中的handler匹配了所有路径(path="*"),导致静态文件请求也被FastCGI拦截,无法直接返回资源。需要添加静态文件的专属处理规则:

<system.webServer>
    <handlers>
        <!-- 优先处理静态文件请求 -->
        <add name="StaticFiles" path="/static/*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
        <!-- 保留原有FastCGI规则处理非静态请求 -->
        <remove name="crm" />
        <add name="crm" path="*" verb="*" modules="FastCgiModule" scriptProcessor="E:\django\crm\crm\crm\env\Scripts\python.exe|E:\django\crm\crm\crm\env\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
    <!-- 确保所有静态文件类型都能被正确识别 -->
    <staticContent>
        <mimeMap fileExtension=".*" mimeType="application/octet-stream" />
    </staticContent>
</system.webServer>

3. 检查静态文件目录的IIS权限

确保IIS应用池对应的用户(格式为IIS AppPool\你的应用池名称)对staticfiles目录有读取权限:

  • 右键staticfiles目录 → 属性 → 安全 → 编辑 → 添加 → 输入应用池用户名 → 检查名称 → 确定
  • 给该用户分配「读取」和「列出文件夹内容」权限

4. 验证urls.py的静态路由配置

在项目根urls.py中确认添加了静态文件路由:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 你的其他业务路由
    # ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

注:生产环境更推荐让IIS直接处理静态文件,此配置作为临时验证使用。

5. 确认STATIC_ROOT路径正确性

验证BASE_DIR / 'staticfiles'的实际物理路径是否正确,比如你的BASE_DIR是E:\django\crm\crm(settings.py在子crm目录下,parent.parent对应外层crm),那么STATIC_ROOT应为E:\django\crm\crm\staticfiles,确认该目录存在且有内容。

6. 重启IIS服务

修改配置后,执行命令iisreset重启整个IIS服务,确保所有配置生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:00:07