提问者:小点点

Django在css文件中的url()上查找错误路径


我正在尝试建立一个使用Django的个人博客,托管在Heroku。您可以在这里查看:https://generic-blog.herokuapp.com/

在我决定将静态文件存储在AWS3上之前,我的所有静态文件都是按计划加载到我的本地机器上的。我将settings.py配置为使用S3,并使用将静态文件收集到S3 bucket中。静态文件按预期加载,但在我的css文件中有url(),其相对路径如下所示:

url("../fonts/blog.woff") format("woff")

因为路径不正确,所以没有加载。我的浏览器控制台出现以下错误:

downloadable font: download failed (font-family: "blog" style:normal weight:400 stretch:100 src index:1): status=2147746065 source: https://personal-django-blogs.s3.amazonaws.com/fonts/blog.woff

Django试图搜索字体的路径错误必须是

我可以用s3 bucket中文件的绝对路径替换每个相对路径,但这感觉不对。我认为问题在于settings.py,但我无法理解为什么在s3上工作时,相对路径不再工作了。

下面是我的Settings.py相关配置:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    BASE_DIR / 'static',
]
# Path to venv
VENV_PATH = os.path.dirname(BASE_DIR)

# Path for collectstatic to store files
STATIC_ROOT = os.path.join(VENV_PATH, 'static_root')

# User uploaded files
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(VENV_PATH, 'media_root')

DEFAULT_FILE_STORAGE = 'blog.s3_storages.MediaStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'

共1个答案

匿名用户

CSSURL()不由Django静态文件处理,而是直接从浏览器调用

由于您使用的是相对路径解析路径值。如果您对这个CSS文件进行了多个部署,那么您需要对它进行一些预处理,以便将bucket名称设置为URL,或者只是将它设置为绝对bucket路径