13

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

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

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

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

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

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

想法?

4

2 回答 2

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 ../images/logo.png

我的项目看起来像这样:

project_dir
  ...
  stuff
  static_media
    ...
    css
    images

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

于 2011-02-01T19:57:16.627 回答
1

好的,

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

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

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

希望能帮助到你!

于 2011-02-13T13:06:17.637 回答