栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Heroku上处理Django静态文件和模板的正确方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Heroku上处理Django静态文件和模板的正确方法

您应该将它们外部存储在S3之类的服务上-虽然Heroku 可以 提供静态文件,但并非设计目的。

这是S3入门的一个很好的入门:

https://devcenter.heroku.com/articles/s3

使用django-storages http://django-
storages.readthedocs.org/en/latest/index.html
将静态文件收集到S3存储桶中并相应地提供服务。

这些是S3所需的必要设置:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'AWS_ACCESS_KEY_ID = 'access-id'AWS_SECRET_ACCESS_KEY = 'secret-key'AWS_STORAGE_BUCKET_NAME = 'bucket-name'AWS_PRELOAD_metaDATA = True # necessary to fix manage.py collectstatic command to only upload changed files instead of all files

MEDIA_ROOT和STATIC_ROOT分别由DEFAULT_FILE_STORAGE和STATICFILES_STORAGE取代,因此不需要。但是,您需要将MEDIA_URL和STATIC_URL设置为类似

STATIC_URL = 'https://bucket-name.s3.amazonaws.com/static/'ADMIN_MEDIA_PREFIX = 'https://bucket-name.s3.amazonaws.com/static/admin/'

如果要将静态文件和媒体文件存储在不同的子文件夹中,这是一个很好的解决方案:https
:
//stackoverflow.com/a/10825691/674794

您需要将MEDIA_URL和STATIC_URL设置为相应的新文件夹,例如

MEDIA_URL = 'https://bucket-name.s3.amazonaws.com/media/'STATIC_URL = 'https://bucket-name.s3.amazonaws.com/static/'

您还需要按照https://devcenter.heroku.com/articles/django-
assets#disabling_collectstatic手动执行manage.py
collectstatic并禁用Heroku的自动collectstatic
,因为Heroku的collectstatic会在您每次将静态文件重新上传到S3时即使未修改文件,也要进行推送,这会增加大量传输并向S3请求加载,从而降低了推送速度。

然后,像往常一样继续在模板中使用{{STATIC_URL}},就应该设置了!

<link href='{{ STATIC_URL }}css/styles.css' type='text/css' rel='stylesheet'>

如果您想从简单开始并且选择不立即采取这种方法,则可以按照Cesar在Heroku上提到的文章-在Django应用程序中处理静态文件来对url配置进行快速修改,尽管会大大减少在应用程序性能方面。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/626468.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号