Django:在静态文件中引用媒体的CSS(django dev / 1.3 / 静态文件)
和其他使用 Django 的用户一样,我也需要处理静态文件。我选择使用 django-staticfiles,这样可以为即将到来的 Django 1.3 做准备,因为它会把这个功能 整合到核心中。
我的问题其实很简单——这个方法很好地把多个媒体资源整合在一起,并且可以在 Django 模板中以统一的方式引用它们。不过,我经常在 CSS 中使用图片背景,像这样:
#itemname { background-image: url('/path/to/image.png'); }
我的问题是,如果我使用绝对路径,就必须把它们写死在代码里。如果我使用相对路径,当我移动到“子目录”网址时,这些资源的位置就会出错,导致无法加载。
那么,我该如何把这个解决方案扩展到 CSS 中呢?这个解决方案必须避免:
- 把 CSS 嵌入到 HTML 中。我个人不喜欢这样做。
- 使用写死的 URL。这样做不太好,因为在我的本地环境中,我通常用 'localhost/project' 来测试(用 apache 和 mod_wsgi),而在部署时我一般用
project.com
。
有什么想法吗?
2 个回答
1
好的,
我不知道@John的解决方案有没有问题,但对我来说没有用,所以我把这段代码放到了CSS里。
{% load static %}
{% get_static_prefix as STATIC_PREFIX %}
然后
<link rel="stylesheet" href="{{ STATIC_PREFIX }}css/main.css">
希望这能帮到你!
19
你提到你在使用相对路径时遇到了问题,但我不太明白你具体指的是什么。
我也遇到过同样的问题,我用相对路径解决了这个问题。需要记住的一点是,当你部署时,图片必须(显然)保持与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,这个CSS文件里引用了 ../images/logo.png
的图片。
我的项目结构看起来是这样的:
project_dir
...
stuff
static_media
...
css
images
如果你有任何问题,告诉我,我会帮你解释清楚。