CSS 文件中的 Django 媒体 URL
-
06-07-2019 - |
题
在 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
上下文变量。
解决办法是什么?
编辑: 我应该注意到,出现问题是因为我的静态媒体文件实际上位于单独的媒体子域上, 从而否定相对路径的使用。 知道了谢谢!
解决方案
您的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 %}
当然第一个选择更加整洁。
其他提示
抱歉,您不会喜欢这个答案。
我有同样的问题:
对于静态提供的 CSS 文件,没有简单的方法可以做到这一点。
我做什么:
- 调试服务器、本地工作、本地媒体服务
- 生产服务器托管在 Amazon S3 上的带有媒体的商业位置
- settings.py 文件通过主机名检查自动设置 MEDIA_URL(DEBUG 等)(以区分生产与实际)本地/主目录/调试)
- HTML文件都具有{{Media_url}}的CSS链接
- 我喜欢绝对路径名,因此“update_s3”脚本:(1) 改变每个CSS文件暂时是为了修复'url(“/媒体”为'url(“ s3.mydomain.com/media'和(2) 将我的 /media 目录更新/上传到 Amazon S3
然后我进入生产并执行 svn 更新并触摸 WSGI 文件并验证
在CSS文件中使用相对路径(用于图像文件)对您来说不是一个可行的选择吗?
如果您想在文件中使用模板指令,为什么不通过模板提供?
不隶属于 StackOverflow