首页 > 解决方案 > Django 创建静态文件夹

问题描述

在 Google Cloud Storage 上使用“collectstatic”上传我的静态数据时,它会将文件上传到存储桶的主根目录,而不是在名为“/static/”的文件夹中,因此生产网络无法读取静态数据。如何创建文件夹“/static/”并将文件上传到 GCS?

这是我的设置:

ALLOWED_HOSTS = ["*"]
DEBUG = True

INSTALLED_APPS += ["django_extensions", ]

DEFAULT_FILE_STORAGE = "storages.backends.gcloud.GoogleCloudStorage"
STATICFILES_STORAGE = "storages.backends.gcloud.GoogleCloudStorage"

GS_BUCKET_NAME = "static-bucket"

GS_MEDIA_BUCKET_NAME = "bucket-name"

标签: djangostatic

解决方案


加载静态文件 GCS 的要求

转到 GCP:Cloud Storage (GCS) 并单击 CREATE BUCKET(根据需要填写)

创建后,如果您希望它像您网站的 CDN(存储您的静态文件,如 css、图像、视频等),您可以将其公开

转到您新创建的存储桶转到权限,然后单击添加成员添加具有角色“云存储 - 存储对象查看器”的新成员“allUsers”参考:https ://cloud.google.com/storage/docs/quickstart-console 主要参考资料:

https://django-storages.readthedocs.io/en/latest/backends/gcloud.html https://medium.com/@umeshsaruk/upload-to-google-cloud-storage-using-django-storages-72ddec2f0d05 先决条件脚步

转到 GCP:Cloud Storage (GCS) 并单击 CREATE BUCKET(根据需要填写)

创建后,如果您希望它像您网站的 CDN(存储您的静态文件,如 css、图像、视频等),您可以将其公开

转到您新创建的存储桶转到权限,然后单击添加成员添加具有角色“云存储 - 存储对象查看器”的新成员“allUsers”参考:https ://cloud.google.com/storage/docs/quickstart-console

第一步 1(更简单、更快,但需要不断手动将文件复制到 GCS)

在 settings.py 中配置 Django 的静态文件设置

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'templates'),
    os.path.join(BASE_DIR, "yourapp1", "templates"),
    os.path.join(BASE_DIR, "yourapp2", "static"),
    os.path.join(BASE_DIR, "watever"),
    "/home/me/Music/TaylorSwift/",
    "/home/me/Videos/notNsfw/",
]

STATIC_ROOT = "/var/www/mywebsite/"

STATIC_URL = "https://storage.googleapis.com/<your_bucket_name>/"

步骤 2 如果您有访问其他静态文件的 HTML 文件或 CSS 文件,请确保它们使用此更新的 STATIC_URL 设置引用这些其他静态文件。

在你的 home.html

{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'home/css/home.css' %}">

然后在你的 home.css 文件中

background-image: url("../assets/img/myHandsomeImage.jpg");

您实际上可以从我提供的链接中阅读参考。

https://django-storages.readthedocs.io/en/latest/backends/gcloud.html https://medium.com/@umeshsaruk/upload-to-google-cloud-storage-using-django-storages-72ddec2f0d05

You home CSS link now will translate to : 
https://storage.googleapis.com/[your_bucket_name]/home/css/home.css

如果你愿意,你可以只放绝对路径(完整的 URL),但这样的配置总是需要你手动更新使用的 URL,就像你切换到开发模式并且只想在本地访问静态文件而不是从 GCS . 这会将所有文件从 STATICFILES_DIRS 中的每个目录复制到 STATIC_ROOT 目录。

python3 manage.py collectstatic

# or if your STATIC_ROOT folder requires permissions to write to it then:
# sudo python3 manage.py collectstatic

好的,在通过 stackoverflow 搜索后,我看到这个问题已经解决,我不希望这是一种重复的形式。所以这里是 stackoverflow 解决方案的链接:Serve Static files from Google Cloud Storage Bucket (for Django App hosting on GCE)


推荐阅读