如何在 IIS 上为不同的 Django 应用程序访问不同的静态文件?

How to access different static files for different Django applications on IIS?

假设我有两个 Django 应用程序:DjangoApp1 和 DjangoApp2
我在 IIS 中用 DjangoApp1 创建了一个网站,在端口 80 上有一些 IP(192.168.1.1),我可以在 192.168.1.1/ 上访问这个网站,静态文件由虚拟目录 static 加载,并且这个网站完全符合预期。

现在,对于第二个应用程序 DjangoApp2,我需要以这种方式通过相同的 IP 地址访问它:192.168.1.1/app2/,因此我在我的网站上创建了一个名为 app2[=25= 的应用程序] 并相应地配置它。现在,由于 DjangoApp2 有一组不同的静态文件,我需要配置我的服务器,以便它也加载这些文件。因为我已经有一个名为 static 的虚拟目录,所以我无法创建一个同名的目录。我尝试创建 app2_static 和所有其他组合,但这些文件没有加载。此应用程序的所有其他功能均正常工作,不依赖于本地静态文件。


如何配置 StaticFileModule 以便它为 DjangoApp2 加载必要的文件,而不干扰 DjangoApp1 的文件?

我使用了 Django 的 FastCgi 和 wfastcgi 模块进行部署配置。

确保它在 settings.py

STATIC_URL = '/static/'

将您的静态文件存储在应用程序文件夹中名为 static 的文件夹中,因此:

DjangoApp1/static/DjangoApp1/example.jpg.
DjangoApp2/static/DjangoApp2/example.jpg.

我从 Django docs

中得到以上信息

同样对于部署,你需要 运行 collectstatic 并让 django 为你将所有静态文件生成到 1 个文件夹中。这里是 the link about this in the docs

当我弄乱我的“DjangoApp2”的 settings.py 文件时,我自己找到了解决方案。我首先考虑将我的 DjangoApp2 的静态文件添加到 DjangoApp1 的静态目录中,但我认为这可能非常低效,所以我开始调整我的 settings.py 文件中的一些更改。
因此,我没有更改 IIS 服务器中的某些内容,而是更改了我的 STATIC_URL.

因此,首先我为我的静态文件创建了一个虚拟目录并将其命名为 app2_static。它的物理路径是BASE_DIR/static.

The BASE_DIR is the directory where the manage.py file of DjangoApp2 is located.

然后,我把STATIC_URL改成了'/app2_static/'。然后我重新启动了 IIS 服务器,网页上加载了静态文件。

Make sure that your web.config file in the static directory of your DjangoApp2 contains only StaticFileModule and no FastCGIModule.