使STATIC_ROOT取决于域

时间:2018-12-06 13:40:05

标签: django nginx django-staticfiles

在我的Django应用程序中,我将staticfiles应用程序与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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

// Tested On CRM v8.2

// lock a header control
Xrm.Page.getControl("header_statuscode").setDisabled(true);

// this won't work if statusreason is hosted in the header section
Xrm.Page.getControl("statuscode").setDisabled(true);

// lock all controls on form, including header controls
Xrm.Page.ui.controls.forEach(function (control) {
    if (control.setDisabled) {
        control.setDisabled(true);
    }
});

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

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

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

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