django - Heroku - 在 Django 应用程序中处理静态文件

标签 django static heroku

我在 heroku 中有一个项目 (myapp),但我无法让静态文件正常工作。我在关注这个blog post .

我的 Procfile 看起来像这样:

web: python myapp/manage.py collectstatic --noinput; bin/gunicorn_django --workers=4 --bind=0.0.0.0:$PORT myapp/settings.py

settings.py:

...

STATIC_ROOT = os.path.join(PROJECT_PATH, 'staticfiles')
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'

STATICFILES_DIRS = (
    # I have the static folder inside my app and not inside the project
    os.path.join(PROJECT_PATH, 'cesar/static'),
)

...

当使用 heroku restart 重启时,heroku logs 显示如下:

...
Copying ...

114 static files copied to '/app/myapp/staticfiles'.
...

但是当我执行 heroku run ls -l myapp/ 时,我看不到 staticfiles 文件夹:

-rw------- 1 u5605 5605    0 Jan 28 16:53 __init__.py
drwx------ 4 u5605 5605 4096 Jan 28 16:53 cesar
-rw------- 1 u5605 5605  503 Jan 28 16:53 manage.py
-rw------- 1 u5605 5605 6292 Jan 28 16:53 settings.py
drwx------ 2 u5605 5605 4096 Jan 28 16:53 templates
-rw------- 1 u5605 5605  257 Jan 28 16:53 urls.py
-rw------- 1 u5605 5605  286 Jan 28 16:53 views.py

我错过了什么或做错了什么?

最佳答案

我找到了一个解决方案。这是我最初的 myapp/urls.py:

from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin
from django.conf import settings


admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', include('myapp.cesar.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

我将这些行添加到原始 myapp/urls.py 文件的末尾:

if not settings.DEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
    )

现在一切正常。我希望这也能帮助其他人

关于django - Heroku - 在 Django 应用程序中处理静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047054/

相关文章:

python - 如何将 Django Form Class 变量传递给嵌套类 Meta?

python - Django Form - 动态切换字段存在

java - 具有静态属性的 Java 代码的奇怪行为

php - 方法中的静态变量不会在实例未设置时重置

ruby-on-rails - 如何在heroku上使用sqlite gem(不是DB)?

heroku - 将账单卡添加到 Heroku 帐户以及使用 dynos 的缺点/优点

Django:重定向到一个页面,然后再次重定向回来?

python - 获取 flake8 返回非零代码 : 1 in docker

python - 创建一个没有实例的静态类

ruby-on-rails - 设计 NoMethodError 'for' ParameterSanitizer