CSS 文件中的 Django 媒体 URL

Posted

技术标签:

【中文标题】CSS 文件中的 Django 媒体 URL【英文标题】:Django media URLs in CSS files 【发布时间】:2010-11-04 15:57:17 【问题描述】:

在 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 上下文变量。

解决办法是什么?

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

【问题讨论】:

【参考方案1】:

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

我也遇到了同样的问题:

使用静态提供的 CSS 文件没有简单的方法。

我做什么:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

您的 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 文件中的 Django 媒体 URL的主要内容,如果未能解决你的问题,请参考以下文章

静态 django 不调用媒体文件

媒体文件不提供给 Django 中的模板

找不到 Django 媒体 URL

Django媒体文件URL的配置

媒体文件夹中的图像未显示 django 模板

使用 Apache 从 Django 中的网络驱动器加载媒体文件