Python 部署到heroku的django应用缺少CSS/静态文件
在这篇文章的开头,我已经阅读了关于这个问题的多篇文章(包括,和)。据我所知,Python 部署到heroku的django应用缺少CSS/静态文件,python,django,heroku,Python,Django,Heroku,在这篇文章的开头,我已经阅读了关于这个问题的多篇文章(包括,和)。据我所知,settings.py中的静态url需要修改,heroku才能运行这些静态文件。我需要的,就像我是个孩子一样,是当静态目录嵌套在应用程序中时,如何调整这些静态url——因为这是在最近的教程中传授的最佳实践(如果这不是理想的实践,我希望得到纠正) 问题1:是否应将媒体文件保存在应用程序或项目级别的目录中 问题2:如果媒体文件保存在应用程序内的一个目录中,如下面的我的目录,那么我应该如何修改settings.py中的url,
settings.py
中的静态url
需要修改,heroku才能运行这些静态文件。我需要的,就像我是个孩子一样,是当静态目录嵌套在应用程序中时,如何调整这些静态url
——因为这是在最近的教程中传授的最佳实践(如果这不是理想的实践,我希望得到纠正)
问题1:是否应将媒体
文件保存在应用程序或项目级别的目录中
问题2:如果媒体文件保存在应用程序内的一个目录中,如下面的我的目录,那么我应该如何修改settings.py中的url
,以便在推送到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
设置.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'
配置的主要问题是静态\u ROOT
设置。您应该将其更改为类似于os.path.join(BASE\u DIR,'static\u root')
STATIC\u ROOT
应该指向一个空目录(它不需要存在,Django会在必要时创建它),Django可以在这里收集静态文件,并在提供服务之前对它们进行任何必要的处理。它不是存储静态文件的目录
无论将静态文件放在何处,都不需要更改static\u URL
设置。只需将其保留为/static/
。需要改变这一点的主要原因是,当您通过CDN提供静态文件时,它将被设置为类似https://my-cdn.example.com/static/
我会将静态文件保存在项目级别的目录中。有时候,当创建一个可重用的应用程序时,通过将其静态文件存储在应用程序内的目录中,将所有内容捆绑在一起是有意义的。但我参与的大多数项目都在项目级别保留了主要的静态文件集
把静态文件放在哪里并不重要,只要告诉Django在哪里可以找到它们。您可以通过将目录路径添加到STATICFILES\u DIRS
设置来完成此操作,如下所示:
STATICFILES_DIRS = [
os.path.join(PROJECT_DIR, 'static'),
]
(从技术上讲,如果您的静态文件位于应用程序目录中,Django应该能够自动找到它们,但让我们保持简单明了。)
作为旁注:注意不要在这里使用术语“media”,因为它在Django术语中有特定的含义,它指的是像概要文件图像这样的文件,而不是像CSS和JavaScript文件这样属于代码库的文件
配置的主要问题是静态\u ROOT
设置。您应该将其更改为类似于os.path.join(BASE\u DIR,'static\u root')
STATIC\u ROOT
应该指向一个空目录(它不需要存在,Django会在必要时创建它),Django可以在这里收集静态文件,并在提供服务之前对它们进行任何必要的处理。它不是存储静态文件的目录
无论将静态文件放在何处,都不需要更改static\u URL
设置。只需将其保留为/static/
。需要改变这一点的主要原因是,当您通过CDN提供静态文件时,它将被设置为类似https://my-cdn.example.com/static/
我会将静态文件保存在项目级别的目录中。有时候,当创建一个可重用的应用程序时,通过将其静态文件存储在应用程序内的目录中,将所有内容捆绑在一起是有意义的。但我参与的大多数项目都在项目级别保留了主要的静态文件集
把静态文件放在哪里并不重要,只要告诉Django在哪里可以找到它们。您可以通过将目录路径添加到STATICFILES\u DIRS
设置来完成此操作,如下所示:
STATICFILES_DIRS = [
os.path.join(PROJECT_DIR, 'static'),
]
(从技术上讲,如果您的静态文件位于应用程序目录中,Django应该能够自动找到它们,但让我们保持简单明了。)
作为旁注:注意不要在这里使用术语“media”,因为它在Django术语中有特定的含义,它指的是像概要文件图像这样的文件,而不是像CSS和JavaScript文件这样属于代码库的文件
谢谢你的详细解释。这就成功了。很高兴了解有关媒体的区别和其他见解。感谢您的详细解释。这就成功了。很高兴了解媒体的区别和其他见解。