使 STATIC_ROOT 依赖域

Make STATIC_ROOT depend on domain

在我的 Django 应用程序中,我将静态文件应用程序与 Whitenoise 结合使用。

我的 Web 服务器可通过两个域访问,我想为每个域提供不同的静态文件。

我的想法是 www.my_domain.com/static/ 会提供 os.path.join(BASE_DIR, "staticfiles/my_domain/") 中的文件,反之亦然www.my_other_domain.com/static/.

实现此目标的最佳方法是什么?我想到了三个解决方案:

  1. 将访问 STATIC_ROOT 的地方子类化,以便将域考虑在内
  2. 使用nginx路由www.my_domain.com/static/my_domain/www.my_domain.com/static/
  3. 使用Django中间件实现与2相同的结果。(如this stack overflow question

谢谢!

我建议使用您问题中的第三个选项。我会说,与其为每个站点创建不同的静态根目录,不如让静态根目录保持不变,并根据您的域创建两个包含静态文件的文件夹。例如:

-- STATIC_ROOT
 | -- domain_a
  | -- js
  | -- css
  | -- img
 | -- domain_b
  | -- js
  | -- css
  | -- img

添加一个中间件,您可以在其中将域路径附加到request:

def domain_middleware(get_response):
    def middleware(request):
        request.domain = request.META['HTTP_HOST'].split('.')[-1]
        response = get_response(request)
        return response
    return middleware

然后在模板中,像这样使用它:

{% static request.domain|add:'/js/something.js' %}