使 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/.
实现此目标的最佳方法是什么?我想到了三个解决方案:
- 将访问
STATIC_ROOT
的地方子类化,以便将域考虑在内
- 使用nginx路由www.my_domain.com/static/my_domain/到www.my_domain.com/static/
- 使用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' %}
在我的 Django 应用程序中,我将静态文件应用程序与 Whitenoise 结合使用。
我的 Web 服务器可通过两个域访问,我想为每个域提供不同的静态文件。
我的想法是 www.my_domain.com/static/ 会提供 os.path.join(BASE_DIR, "staticfiles/my_domain/")
中的文件,反之亦然www.my_other_domain.com/static/.
实现此目标的最佳方法是什么?我想到了三个解决方案:
- 将访问
STATIC_ROOT
的地方子类化,以便将域考虑在内 - 使用nginx路由www.my_domain.com/static/my_domain/到www.my_domain.com/static/
- 使用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' %}