Heroku上的Django-损坏的管理静态文件
我有一个在Heroku/Cedar上运行的Django应用程序,按照 按照Heroku的指示使用gunicorn无法包含Django管理员运行所需的静态文件。我可以将Procfile更改为“manage.py run\u gunicorn”以进行本地开发,但这不会在Heroku上运行Heroku上的Django-损坏的管理静态文件,django,heroku,django-admin,Django,Heroku,Django Admin,我有一个在Heroku/Cedar上运行的Django应用程序,按照 按照Heroku的指示使用gunicorn无法包含Django管理员运行所需的静态文件。我可以将Procfile更改为“manage.py run\u gunicorn”以进行本地开发,但这不会在Heroku上运行 我已经搜索了所有的修复程序-是否有办法在不将管理员静态文件与其他静态文件一起放到S3上的情况下包含这些静态文件?如果使用runserver并将应用程序配置为DEBUG=True,那么它将像在开发机器上一样为管理员文
我已经搜索了所有的修复程序-是否有办法在不将管理员静态文件与其他静态文件一起放到S3上的情况下包含这些静态文件?如果使用runserver并将应用程序配置为DEBUG=True,那么它将像在开发机器上一样为管理员文件提供服务。但是,这绝对不是推荐的方法,我建议您将它们放在S3上 使用django storages应用程序,很容易将collectstatic配置为自动将所有管理文件推送到S3。你可以找到方向查看这篇文章: 如果这对您不起作用,请尝试在正常url模式元组之后向url.py添加以下内容。在推送到heroku之前,请确保您拥有STATIC_根集,并且在本地环境中运行了collect STATIC
urlpatterns += patterns('',
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.STATIC_ROOT,
}),
)
urlpatterns+=模式(“”,
url(r'^static/(?P.*)$,'django.views.static.service'{
“document\u root”:settings.STATIC\u root,
}),
)
我让django管理员处理以下编辑
py(在末尾)
只需添加这些即可
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
使用django 1.4.1'django.contrib.staticfiles.views.service' 而不是
“django.views.static.service”将“static”文件夹创建到“project\u目录”中 在“settings.py”文件中设置“STATIC_ROOT”路径,它可以为管理员站点的静态文件提供服务
STATIC_ROOT = (os.path.join(os.path.dirname(__file__), '..', 'static'))
在“/url.py”中添加静态根目录from django.conf import settings
urlpatterns += patterns('',
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.STATIC_ROOT,
}),
)
现在进行git添加、提交和推送heroku master。与要求的日期相比似乎有点晚。但我进入了这个问题,花了30分钟来解释我做错了什么。因此,对于那些可能落入这个陷阱的人来说,这是一个神奇的解决方案 Heroku的
django.contrib.staticfiles.URL有一些问题
解决方案
您需要在Heroku安装程序上安装dj static
()。
这是一个Django中间件实用程序,允许使用像Gunicorn这样的WSGI服务器从生产中正确地服务静态资产。
我希望这会对其他人有所帮助。遵循这一点,解决Django和heroku的所有静态相关问题 在您的
settings.py中,将其粘贴到末尾
import settings
urlpatterns += patterns('',
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.STATIC_ROOT,
}),
)
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\u name/templates/app\u name/
渲染模板时,这是指定模板名称的方式
在views.py中
.....
return render(request,'app_name/template_name.html',context)
对于静态文件
请将文件放在此处:
project\u folder/app\u name/static/app\u name/css
project\u folder/app\u name/static/app\u name/js
project\u folder/app\u name/static/app\u name/img
要访问静态文件,请使用pathapp\u name/css/style\u name.css
如果您遵循这一点,您的所有静态文件将在heroku以及本地开发机器中正常加载。如果您部署到heroku而不使用whitenoise(我建议),则一定要使用dj_static
我花了3个小时试图将我的文件提供给heroku,dj_static在2分钟内就工作了。对于我来说,使用Django 1.5.1可以工作,而“Django.views.static.serve”没有。谢谢你的提醒-我认为在1.5中改变了路径,将其添加到设置中实际上是heroku教程的一部分。我完成了这些说明,但在管理中仍然存在相同的问题,所以这似乎不是一个有效的解决方案。它在当时对我有效。我不知道为什么它现在不起作用,起作用了!好兄弟!与版本:3.1.5一起使用。:)特别是将其添加到包含“path('admin/',admin.site.url),”的相同urlpatterns列表中
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/'
.....
return render(request,'app_name/template_name.html',context)