带有 digitalocean 空间的 Django 静态 url

Psy*_*n25 1 django amazon-s3 digital-ocean

I have an droplet on digitalocean which for the most part is working great, however i have enabled the cdn option in digitalocean spaces (similar to aws s3 storage) and in trying to load static files using the cdn url, i cannot seem to get the url working correctly so suspect i am missing the obvious?

For example when i change the STATIC_URL in settings to the cdn no change is seen in the web page source? If i change the AWS_S3_ENDPOINT_URL and MEDIA_ENDPOINT_URL then the source does change but the files are not found and as one can guess a collectstatic no longer works, So i assume that the AWS_S3_ENDPOINT_URL & MEDIA_ENDPOINT_URL need to remain as is and i merely need to ensure the static_url is used?

I did read somewhere that it was not good practice to change the templates from {%static.... to {%static_url so have not done that, is this something i should update or not?

Settings:

AWS_S3_ENDPOINT_URL     = 'https://nyc3.digitaloceanspaces.com'
MEDIA_ENDPOINT_URL      = 'https://nyc3.digitaloceanspaces.com/media/'
AWS_STORAGE_BUCKET_NAME = 'mysitestaging'

#STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
# if False it will create unique file names for every uploaded file
AWS_S3_FILE_OVERWRITE = False
STATICFILES_STORAGE = 'mysite.settings.storage_backends.StaticStorage'
DEFAULT_FILE_STORAGE = 'mysite.settings.storage_backends.MediaStorage'

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}


# the sub-directories of media and static files
STATIC_ROOT = 'static'
MEDIA_ROOT = 'media'
AWS_DEFAULT_ACL = 'public-read'

BUCKET_ROOT =   '{}/{}/'.format(AWS_S3_ENDPOINT_URL, STATIC_ROOT)

# the regular Django file settings but with the custom S3 URLs
STATIC_URL = '{}/{}/'.format('https://cdn.mysite.com', STATIC_ROOT)
MEDIA_URL = '{}/{}/'.format('https://cdn.mysite.com', MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

Source view returns:

https://nyc3.digitaloceanspaces.com/mysitestaging/static/img/apple-touch-icon.png?AWSAccessKeyId=37FLLPUJLEUO5IG7R4GQ&Signature=eof5%2BZvHPo%2FRSzvKQsrobXkcOZ0%3D&Expires=1586789962
Run Code Online (Sandbox Code Playgroud)

cdn.mysite.com

is an alias of

mysitestaging.nyc3.cdn.digitaloceanspaces.com.

My storage_backends.py:


import os
from storages.backends.s3boto3 import S3Boto3Storage
from my_site.settings import core_settings

class StaticStorage(S3Boto3Storage):
    location = core_settings.STATIC_ROOT

class MediaStorage(S3Boto3Storage):
location = core_settings.MEDIA_ROOT
Run Code Online (Sandbox Code Playgroud)

Psy*_*n25 5

好吧,通过实际重新阅读文档来解决这个问题:

https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html

添加以下内容立即生效:

AWS_S3_CUSTOM_DOMAIN = 'cdn.mysite.com'

希望它对其他人有帮助。