CSS文件中的Django媒体URL

Yuv*_*dam 36 django django-templates

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

<img src="{{ MEDIA_URL }}/img/someImage.jpg">
Run Code Online (Sandbox Code Playgroud)

你如何在一个不作为模板的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? */
}
Run Code Online (Sandbox Code Playgroud)

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

解决方案是什么?

编辑:我应该注意问题出现,因为我的静态媒体文件实际上位于单独的媒体子域上,因此否定了相对路径的使用.知道了谢谢!

oza*_*zan 47

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

media/
    images/
    css/
    js/
Run Code Online (Sandbox Code Playgroud)

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

background: url('../images/foo.png');
Run Code Online (Sandbox Code Playgroud)

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

{% if DEBUG %}
    <link rel="stylesheet" href="{{ MEDIA_URL }}css/offline-mode.css" />
{% endif %}
Run Code Online (Sandbox Code Playgroud)

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


joe*_*oej 6

对不起,你不会喜欢这个答案.

我有同样的问题:

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

我所做的:

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

然后我去制作并进行svn更新并触摸WSGI文件并验证