【问题标题】:Can Django STATIC_ROOT point to path on another server?Django STATIC_ROOT 可以指向另一台服务器上的路径吗?
【发布时间】:2023-02-03 12:49:43
【问题描述】:

我在我的项目中使用 Django 4.0.1,在部署我的站点之前,我面临着处理我的静态文件的问题。由于我的服务器的限制,我决定改为通过 CDN 提供这些静态文件。

我已经在settings.py中配置了我的STATIC_URL选项:

STATIC_URL = 'assets/'

我知道在 Django 文档中,他们说这个 url 指的是位于 STATIC_ROOT 中的静态文件。当然,通常后者是您服务器上的绝对路径,collectstatic 命令收集静态文件并将它们放在那里,但我想知道我是否可以配置此 STATIC_ROOT 以指向不在我的服务器上的路径.

准确的说,我想知道能不能把STATIC_ROOT指向我的CDN存储。通过这种方式,我仍然可以使用 STATIC_URL 来引用我的静态资产,同时能够通过 CDN 为它们提供服务。

【问题讨论】:

    标签: python python-3.x django


    【解决方案1】:

    是的,它实际上是多年来为静态文件提供服务的推荐方式。不知道为什么 Django 没有将它添加到它的核心。

    你可以使用django-storages,它支持几乎所有的云提供商。您可以将它用于 media 和/或 static

    【讨论】:

      【解决方案2】:

      是的,您绝对可以将它用于任何其他服务器。例如,当我们使用 AWS S3 作为服务器来提供静态文件时,它应该如下所示:

      USE_S3 = os.getenv('USE_S3') == 'TRUE'
      
      if USE_S3:
          # aws settings
          AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
          AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
          AWS_STORAGE_BUCKET_NAME = os.getenv('AWS_STORAGE_BUCKET_NAME')
          AWS_DEFAULT_ACL = 'public-read'
          AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
          AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
          # s3 static settings
          AWS_LOCATION = 'static'
          STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_LOCATION}/'
          STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
      else:
          STATIC_URL = '/staticfiles/'
          STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-25
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 2017-05-04
        • 1970-01-01
        • 2015-07-11
        • 1970-01-01
        相关资源
        最近更新 更多