CSS文件中的Django媒体URL

时间:2009-06-21 13:25:35

标签: django django-templates

在django模板中,通常会执行以下操作:

<img src="{{ MEDIA_URL }}/img/someImage.jpg">

如何在不作为模板的CSS文件中完成此操作?

.someClass {
    /* can't do this this */
    background: url("{{ MEDIA_URL }}/img/someImage.jpg");        
    /* either this */
    background: url("http://media.domain.com/img/someImage.jpg");
    /* or this */
    background: url("/django_static_media/img/someImage.jpg");
    /* can't do both... what to do? */
}

我需要能够从媒体子域提供文件,或者在离线工作期间直接将其作为django静态视图提供。但CSS文件是一个问题,因为它们不作为模板处理,我不能使用MEDIA_URL上下文变量。

解决方案是什么?

编辑:我应该注意到问题出现了,因为我的静态媒体文件实际上位于一个单独的媒体子域,因此无法使用相对路径。明白了,谢谢!

4 个答案:

答案 0 :(得分:46)

您的css文件在哪里提供?这通常不是一个常见的媒体结构问题,例如:

media/
    images/
    css/
    js/

(或类似)允许图像的相对文件路径,例如:

background: url('../images/foo.png');

如果您还没准备好更改媒体文件夹结构以容纳相对文件路径,那么您可能别无选择,只能在模板中使用辅助css文件覆盖css声明:

{% if DEBUG %}
    <link rel="stylesheet" href="{{ MEDIA_URL }}css/offline-mode.css" />
{% endif %}

当然第一个选择更加整洁。

答案 1 :(得分:6)

抱歉,您不会喜欢这个答案。

我遇到了同样的问题:

使用静态服务的CSS文件没有简单的方法。

我的所作所为:

  • 调试服务器,本地工作,本地服务媒体
  • 生产服务器托管在亚马逊S3上的商业w /媒体
  • settings.py文件通过主机名检查自动设置MEDIA_URL(DEBUG等)(区分生产与本地/家庭/调试)
  • HTML文件都有css链接 {{MEDIA_URL}}(+ RequestContext 观点的背景)
  • 我喜欢绝对路径名,所以“update_s3”脚本: (1)改变每个css文件暂时修复 'url(“/ media'到'url(”s3.mydomain.com/media“和。) (2)将my / media目录更新/上传到Amazon S3

然后我去制作并做一个svn更新&amp;触摸WSGI文件&amp;验证

答案 2 :(得分:3)

在CSS文件中使用相对路径(用于图像文件)对您来说不是一个可行的选择吗?

答案 3 :(得分:0)

如果您想在文件中使用模板指令,为什么不通过模板提供?