2012-04-25 86 views
14

我有一个Django应用程序在Heroku /雪松运行,配置为按照指示在https://devcenter.heroku.com/articles/django的Django在Heroku - 破碎管理员静态文件

使用gunicorn按照Heroku的指示不包括Django的管理员所需的静态文件功能。我可以将Procfile更改为“manage.py run_gunicorn”以进行本地开发,但这不适用于Heroku。

我已经搜索了所有的修补程序 - 是否有一些方法来包含管理静态文件,而不会将它们扔在S3与我的其他静态文件?

回答

8

如果您使用runserver并使用DEBUG = True配置您的应用程序,那么它将像在您的开发计算机上一样提供管理文件。但是,这绝对不是推荐的方式,我建议你把它们放在S3上。

使用django-storage应用程序很容易配置collectstatic以自动将所有管理文件推送到S3。你可以找到方向here

8

退房这个帖子:http://matthewphiong.com/managing-django-static-files-on-heroku

如果您尝试添加下列到正常的URL模式元组后您的urls.py不起作用。确保您已设置STATIC_ROOT,并且在推送到heroku之前,您已在本地环境中运行收集静态。

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

对我来说,使用Django 1.5.1,['django.contrib.staticfiles.views'](https://docs.djangoproject.com/en/1.5/ref/contrib/staticfiles/#django.contrib.staticfiles .views.serve)工作,而'django.views.static.serve'没有。 – snakesNbronies 2013-06-16 05:23:43

+0

感谢您的注意 - 我认为路径改为1.5 – 2013-06-17 14:21:56

1

我Django管理具有以下编辑工作

urls.py(末)

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

Procfile

web: gunicorn hellodjango.wsgi -b 0.0.0.0:$PORT 
5

只需添加这些替代

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
urlpatterns += staticfiles_urlpatterns() 

使用Django 1.4.1

0

'django.contrib.staticfiles.views.serve'

,而不是

'django.views.static.serve'

3

创建 '静态'文件夹放到你的'project_directory'中。

在'settings.py'文件中设置'STATIC_ROOT'路径,该文件可以为您的管理站点的静态文件提供服务。

STATIC_ROOT = (os.path.join(os.path.dirname(__file__), '..', 'static')) 

在“/urls.py”

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

运行以下命令,将所有管理静态文件复制到项目的静态文件夹添加STATIC_ROOT。

python manage.py collectstatic 

现在做git添加,提交并推送heroku主。

3

与要求的日期相比,它似乎迟了一点。但我进入这个问题,花了30分钟,我做错了什么。所以对于那些陷入这个陷阱的人来说,这是一个神奇的解决方案。

有一些问题,Heroku的django.contrib.staticfiles.urls

SOLUTION

您需要在您的Heroku安装程序安装dj-staticLink to download)。 这是一个Django中间件实用程序,它允许使用像Gunicorn这样的WSGI服务器从生产中正确提供静态资产。

我希望这会帮助别人。

+0

将此添加到设置实际上是Heroku教程的一部分。我完成了这些说明,并且在管理中仍然存在相同的问题,所以这似乎不是一个有效的解决方案。 – rschwieb 2015-01-03 18:32:50

+0

当时它适用于我。我不知道为什么现在不行。 – Kshitij 2015-01-03 18:47:08

+0

工作!卓越的兄弟! – 2016-12-22 04:11:20

0

请按照此解决所有与Django和heroku相关的静态相关问题。

在你settings.py粘贴在年底

import os 
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 

STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'static'), 
    ) 
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR,'templates'), 
    ) 

STATIC_URL = '/static/' 

您的特定应用程序的模板应该是app_name/templates/app_name/

当您呈现模板,这是你将如何在views.py指定template name

..... 
return render(request,'app_name/template_name.html',context) 

对于static files将您的档案在这里:

project_folder/app_name/static/app_name/css

project_folder/app_name/static/app_name/js

project_folder/app_name/static/app_name/img

访问您的静态文件使用路径app_name/css/style_name.css

如果遵循这一点,所有的静态文件会在heroku以及本地开发机器中加载得很好。