我正在使用 Django 3.2,我有 3 種型別的靜態檔案(影像、css 檔案、js 檔案)。
我不希望使用 git 對影像進行版本控制,因此我找到了一種方法讓 aws S3 存盤桶使用django-storagesand為它們提供服務boto3。settings.py它與我檔案中的以下配置完美配合:
AWS_ACCESS_KEY_ID = "my-key-id"
AWS_SECRET_ACCESS_KEY = "my-secret-key"
AWS_STORAGE_BUCKET_NAME = "my-bucket-name"
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
#DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_S3_ADDRESSING_STYLE = "virtual"
AWS_S3_REGION_NAME = 'my-region'
AWS_S3_SIGNATURE_VERSION = 's3v4'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
雖然此配置作業得非常好,但它也迫使我將 CSS 和 js 檔案也放在 AWS s3 存盤桶中。我對我的 CSS 和 js 檔案由 django(或生產環境中的 NGINX)提供服務并使用我的代碼進行版本控制而無需手動將它們復制到存盤桶中感到非常滿意。
您是否有解決方案僅通過 AWS S3 提供靜態影像,通過 NGINX 提供 CSS/JS 檔案?
uj5u.com熱心網友回復:
{% static ... %}只是一個模板標簽,它是一個基于給定值和STATIC_URL來自settings.py構建整個 URL 的函式。當 Django 在 dev 中提供靜態檔案時,它將STATIC_URL前綴從 URL 映射到STATIC_ROOT,從而決議檔案位置。
要使用 NGINX 提供靜態檔案,您只需要在模板中生成正確的 URL。將 URL 映射到檔案將由 NGINX 通過 config 完成location -> root/alias。
一種可能的解決方案是通過實作您自己的“靜態”模板標簽生成您需要的 URL 來劃分影像和腳本的 URL(URL 前綴)。例如
@register.simple_tag(name="static_script")
def static_non_image_files(path):
return urllib.parse.urljoin(settings.STATIC_SCRIPTS_URL, path)
并使用此模板標簽代替static. {% static_script "/style/main.css" %}在S3static上用于影像時。因此,您將能夠將不同型別的靜態檔案映射到不同的存盤引擎。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422519.html
標籤:
上一篇:在這個例子中究竟發生了什么
