Django:css在静态文件中引用媒体(django dev / 1.3 / static files)

Posted

技术标签:

【中文标题】Django:css在静态文件中引用媒体(django dev / 1.3 / static files)【英文标题】:Django: css referencing media in static files (django dev / 1.3 / static files) 【发布时间】:2011-06-19 12:24:57 【问题描述】:

与 django 用户的任何其他用户一样,我提供静态文件。我选择使用 django-staticfiles 为 django 1.3 做好准备,它将基本上集成它 into the core。

我的问题真的很简单——这非常适合将多个媒体源放在一起并在 django 模板中以统一的方式引用它们。但是,我经常在 Css 中像这样使用图像背景:

#itemname  background-image: url('/path/to/image.png'); 

我的问题很简单——如果我使用绝对名称,我必须对它们进行硬编码。如果我使用相对名称,移动到“子目录”网址会弄乱这些项目的资源位置,并且无法加载它们。

那么,如何将此解决方案扩展到 CSS?所述解决方案必须避免:

在 html 中嵌入 css。我个人避免这种情况。 使用硬编码的网址。这不能很好地工作,因为在我的本地设置中,我通常使用 'localhost/project' 和 apache 进行测试 (mod_wsgi),而我倾向于使用 project.com 进行部署。

想法?

【问题讨论】:

【参考方案1】:

你说相对路径有问题,但我不明白你的意思。

我遇到了同样的问题,我使用了相对路径来解决它。唯一要记住的是,在部署图像时,需要(显然)保持相对于 CSS 文件的相同路径。

简而言之我的设置:

注意我仍然在 Django 1.2 中使用 django-staticfiles,但在 Django 1.3 中应该也可以使用它

STATIC_URL = "/site_media/static/"
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static")
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, "static_media"),
)

然后我从 STATIC_URL css/style.css 提供CSS,它引用../images/logo.png 的图像。

我的项目是这样的:

project_dir
  ...
  stuff
  static_media
    ...
    css
    images

如果您有任何问题,请告诉我,我会澄清的。

【讨论】:

我不确定的一点,现在你已经回答了 - css background-image url 是相对于 css 文件,还是提供页面的 url?如果是前者,我会排序,因为我可以完全使用你所概述的内容。 刚刚测试过了 - 相对似乎在 css 中工作。我对此很满意。打勾! @John,是 PROJECT_ROOT 也由您在某处定义,或者它由 Django 自动定义为您当前的项目根目录(您的 manage.py 所在的位置)。如果您自己定义PROJECT_ROOT,您需要根据它是在开发环境还是生产环境(作为目录结构)不断更改它,两者可以不同 @David,我通常在 settings.py 中将PROJECT_ROOT 定义为PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)),这样它在移动时就不需要重新定义了。 很棒的答案!在到达这里之前已经在谷歌上搜索了一个小时。【参考方案2】:

好的,

我不知道@John 的解决方案是否有问题,但它对我没有用,然后我把这段代码放在 CSS 上

% load static %
% get_static_prefix as STATIC_PREFIX %

<link rel="stylesheet" href=" STATIC_PREFIX css/main.css">

希望对你有帮助!

【讨论】:

这意味着您的所有样式表都必须被解析为模板...考虑缓存它们!

以上是关于Django:css在静态文件中引用媒体(django dev / 1.3 / static files)的主要内容,如果未能解决你的问题,请参考以下文章

Django 中的静态和媒体 URL

静态 django 不调用媒体文件

Django:在基于类的视图中包含媒体(css/js)

12.Django中静态文件的引用

12.Django中静态文件的引用

如何在 django 中使用带有版本的 css 文件上的静态文件