django_heroku.settings(locals()) 不在 collectstatic 的末尾

我用 Django、heroku 和 S3 创建了一个 webapp。在生产中,静态文件的上传似乎只有在注释掉 django_heroku.settings(locals()) 时才有效

#django_heroku.settings(locals())

STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

然后在 HTML 中,静态文件的 url 要么在名称中得到加密,如“main.css”变成“main-5354332324.css”,并且无法访问,或者我添加

AWS_DEFAULT_ACL = "public-read"
AWS_QUERYSTRING_AUTH = False

并且静态文件的名称保留但仍然无法访问。

到目前为止,我知道 django_heroku.settings(locals()) 会用默认值覆盖位置。我想知道这里到底发生了什么,什么是适合生产的解决方案,因为 django_heroku.settings(locals()) 实际上应该在最后,据我所知它应该是 AWS_DEFAULT_ACL=None 。

stack overflow django_heroku.settings(locals()) not at the end for collectstatic
原文答案

答案:

作者头像

嘿,我遇到了同样的问题 django_heroku 使用 whitenoise 覆盖您拥有的任何内容并将其保存到静态文件中我所做的是在我的代码底部添加这一行 django_heroku.settings(locals(), staticfiles=False) 从 cli 或应用程序设置中将您的配置变量添加到 heroku

作者头像

当我将 django_heroku.settings(locals()) 放入 settings.py 模块时,我遇到了同样的问题。将行修改为 django_heroku.settings(locals(), staticfiles=False) 后它起作用了。