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设置

处理程序映射

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

