подход к решению этой проблемы, что я взял, должен был создать новый templatetag под названием «static_cdn»; и он будет делать некоторые проверки, чтобы сказать: «Я местный, dev, production и т. д.» и соответствующим образом изменяет домен в зависимости от того, где он был. Нет смысла генерировать CDN-трафик, если я просто привожу локально (или, по крайней мере, я еще не там).
Другой подход, который я рассматривал, состоял в том, чтобы полностью переопределить статический тег по умолчанию и поместить туда логику, но пока я хотел сохранить гранулярность, чтобы, если по какой-то причине я хотел получить непосредственно из S3 и а не CloudFront на производственных серверах, у меня была эта способность.
редактирования: Пример кода может выглядеть следующим образом:
# Import: Django
from django.template import Library
from django.templatetags.static import static
# Static CDN
# - We could probably go in and overwrite the default static template tag
# and decide to use the CDN or not; for now, though, I want the option
# (even remotely) to explicitly use the CDN or not.
def static_cdn(url):
if not LOCAL_ENVIRONMENT:
# StackOverflow: Do not do this! Import/Write/etc an urljoin (see Django code
# for examples - you can probably import the version Django uses internally.
return 'https://{0}{1}{2}'.format(AWS_CLOUDFRONT_DOMAIN, STATIC_URL, url)
else:
return static(url)
# Register
register = Library()
register.simple_tag(static_cdn)
Может быть, вы хотите переопределить [метод URL] (https://docs.djangoproject.com/en/dev/ref/files/ хранение/# django.core.files.storage.Storage.url) –