gpt4 book ai didi

python - 将 django 应用程序部署到 heroku 缺少 CSS/静态文件

转载 作者:行者123 更新时间:2023-11-30 22:51:31 25 4
gpt4 key购买 nike

在此开头说我现在已经阅读了有关此问题的多篇文章(包括 hereherehere )。我的理解是static urlsettings.py需要对 heroku 进行修改才能运行这些静态文件。我需要的是,就像我是个 child 一样解释,对这些 static url 进行哪些调整当静态目录嵌套在应用程序中时——因为这是最近教程中传授的最佳实践(如果这不是理想的实践,我希望得到纠正)。

问题 1:应该 media文件应保存在应用程序内的目录中还是项目级别?

问题2:如果媒体文件保存在应用程序内的某个目录中,就像我下面的目录一样,那么我应该如何修改urlsettings.py加载推送到heroku后的静态文件?

我的项目结构如下:

gvlabs
__init__.py
__init__.pyc
settings.py
settings.pyc
urls.py
urls.pyc
wsgi.py
wsgi.pyc
manage.py
Procfile
requirements.txt
runtime.txt
welcome
__init__.py
__init__.pyc
admin.py
admin.pyc
apps.py
hello.py
migrations
models.py
models.pyc
static
css
fonts
images
js
templates
welcome
base.html
comingsoon.html
contact_us.html
index.html
post_list.html
tests.py
urls.py
urls.pyc
views.py
views.pyc

settings.py

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
PROJECT_DIR = os.path.join(PROJECT_ROOT,'../welcome')

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
#STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_ROOT= os.path.join(PROJECT_DIR,'static')

STATIC_URL = '/welcome/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = ()

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

最佳答案

  1. 您的配置的主要问题是STATIC_ROOT环境。您应该将其更改为类似 os.path.join(BASE_DIR, 'static_root') 的内容.

    STATIC_ROOT应该指向一个空目录(它不需要存在,Django 将在必要时创建它),Django 可以在其中收集静态文件,并在提供它们之前对它们进行任何必要的处理。它不是您存储静态文件的目录。

  2. 无论您将静态文件放在哪里,您都不需要更改 STATIC_URL环境。只需将其保留为 /static/ 。需要更改此设置的主要原因是当您通过 CDN 提供静态文件时,它将设置为类似 https://my-cdn.example.com/static/ 的值。

  3. 我会将静态文件保存在项目级别的目录中。有时,在创建可重用应用程序时,通过将静态文件存储在应用程序内的目录中来将所有内容捆绑在一起是有意义的。但我参与过的大多数项目都将主要的静态文件集保留在项目级别。

  4. 只要告诉 Django 在哪里可以找到静态文件,将静态文件放在哪里并不重要。您可以通过将目录路径添加到 STATICFILES_DIRS 来完成此操作。设置如下:

    STATICFILES_DIRS = [
    os.path.join(PROJECT_DIR, 'static'),
    ]

    (从技术上讲,如果您的静态文件位于应用程序目录中,Django 应该能够自动找到它们,但让我们保持简单和明确。)

  5. 作为旁注:请注意不要在此处使用术语“媒体”,因为它在 Django 术语中具有特定含义,它指的是 user-uploaded文件(例如个人资料图像),而不是属于您的代码库的文件(例如 CSS 和 JavaScript 文件)。

关于python - 将 django 应用程序部署到 heroku 缺少 CSS/静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38987993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com