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
如果您有任何问题,请告诉我,我会澄清的。
【讨论】:
我不确定的一点,现在你已经回答了 - cssbackground-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)的主要内容,如果未能解决你的问题,请参考以下文章