前言这说我现在已经阅读了有关此问题的多篇帖子(包括here,here和here)。我的理解是static url
中的settings.py
需要修改heroku才能运行这些静态文件。我需要的东西,就像我是一个孩子一样,在静态目录嵌套在应用程序中时对这些static url
进行调整 - 因为这是最近教程中传授的最佳实践(如果这不是理想的做法,我希望得到纠正)。
问题1: media
文件应保存在应用程序内的目录中还是项目级别?
问题2:如果媒体文件保存在应用内的目录中,如下面的目录,那么我应该如何修改url
中的settings.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'
答案 0 :(得分:3)
配置的主要问题是STATIC_ROOT
设置。您应该将其更改为os.path.join(BASE_DIR, 'static_root')
。
STATIC_ROOT
应指向一个空目录(它不需要存在,Django会在必要时创建它),Django可以将静态文件收集在一起,并在它们服务之前对它们进行任何必要的处理他们。它是不存储静态文件的目录。
无论您将静态文件放在何处,都不应该更改STATIC_URL
设置。只需将其保留为/static/
即可。需要更改此功能的主要原因是,当您通过CDN提供静态文件时,将其设置为https://my-cdn.example.com/static/
我会将静态文件保存在项目级别的目录中。有时,在创建可重用的应用程序时,通过将其静态文件存储在应用程序的目录中来将所有内容捆绑在一起是有意义的。但是我工作的大多数项目都将主要的静态文件保存在项目级别。
只要告诉Django在哪里找到它们,放置静态文件的位置并不重要。您可以通过将目录路径添加到STATICFILES_DIRS
设置来执行此操作,如下所示:
STATICFILES_DIRS = [
os.path.join(PROJECT_DIR, 'static'),
]
(从技术上讲,如果您的静态文件位于app目录中,Django应该能够自动找到它们,但让我们保持简单明了。)
作为旁注:注意不要使用术语"媒体"在这里,因为它在Django术语中具有特定含义,它引用user-uploaded文件,如配置文件图像,而不是属于您的代码库的文件,如CSS和JavaScript文件。