2013-02-09 70 views
0

我试图获取一个背景图像来显示在Amazon S3上托管静态文件。在我base.html文件下面的代码工作得很好,并发现位于我的S3存储桶的CSS文件:Django静态文件相对引用Amazon S3

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

我的问题是,我的CSS文件中,以下行似乎并没有找到图片:

background-image: url("{{ STATIC_URL }}img/GreenBackground.jpg") no-repeat center center fixed; 

我的亚马逊桶看起来像

/newdjangoapp 
--/admin 
--/css 
----/stylesheet.css 
--/img 
----/GreenBackground.jpg 

我曾尝试加入周围的IMG和css目录额外的“静态”目录和文件路径更新此,我有特里d以下代码:

background-image: url("{{ STATIC_URL }}../img/GreenBackground.jpg") no-repeat center center fixed; 

甚至

background-image: url("../img/GreenBackground.jpg") no-repeat center center fixed; 

我的静态URL设置如下:

STATIC_URL = 'http://s3.amazonaws.com/' + AWS_STORAGE_BUCKET_NAME +'/' 

和静态目录...

STATIC_ROOT = os.path.join(PROJECT_DIR,'') 

STATICFILES_DIRS = (
     os.path.join(PROJECT_DIR, 'static/'), 
) 

任何帮助这个问题得到很大的解决不胜感激!

+0

你应该在CSS文件中使用相对路径,就像你最后一个例子:'background-image:url(“ ../img/GreenBackground.jpg“)no-repeat center center fixed;'。当你查看页面的源代码时指定的相对路径是什么? – 2013-02-09 01:46:07

+0

我认为你不必使用{{STATIC_URL }}在你的CSS文件只是点(s)只是为了找到图像的确切位置 – catherine 2013-02-09 06:48:03

+0

@DanHoerst当我查看源代码时,它显示了CSS文件的链接,该文件又显示给我下面一行(参考图片): 'background-image:url(“../ img/GreenBackground.jpg”)no-repeat center center fixed;' 它应该显示一个到CSS中图像的完整链接吗?因为,对于上面的文件结构,我应该导航出CSS子目录,进入img子目录并找到刚刚没有发生的图像。 – 2013-02-09 14:13:51

回答

1

也许你应该引用它,因为你的CSS不知道{{STATIC_URL}}。看看你是如何在你的django settings.py文件中定义静态的(在我的例子中是“/ static /”),然后像在css文件中那样引用静态文件,而不是{{STATIC_URL}},让你的引用和你一样在你的settings.py文件中创建(在我的情况下,这将是“/ static/css ...”)

+0

谢谢杰夫! – Erika 2013-02-09 13:21:19

+0

@JeffBauer所以在我的情况下(只使用项目目录作为静态根目录,Amazon存储区作为我的静态URL)是否必须从项目根目录一直导航到图像文件?即appname/static/img/GreenBackground.img,还是我不能利用这个事实:我的CSS文件与我的图像位于同一子目录中? – 2013-02-09 14:19:44