Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 部署到heroku的django应用缺少CSS/静态文件_Python_Django_Heroku - Fatal编程技术网

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文件这样属于代码库的文件


  • 谢谢你的详细解释。这就成功了。很高兴了解有关媒体的区别和其他见解。感谢您的详细解释。这就成功了。很高兴了解媒体的区别和其他见解。