2011-02-01 4 views
13

djangoユーザーの他のユーザーと同様に、私は静的ファイルを提供します。私は基本的にinto the coreを統合するdjango 1.3の準備をするためにdjango-staticfilesを使用することを選択しました。Django:静的ファイル(django dev/1.3/staticファイル)のメディアを参照するCSS

私の質問はとても簡単です。これは、複数のメディアソースをまとめてdjangoテンプレートの一貫した方法で参照するのに最適です。しかし、私は頻繁にそうようにCSSで画像の背景を使用します。

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

私の質問は簡単です - 私は絶対的な名前を使用している場合、私はハードコードそれらに持っています。相対名を使用すると、「サブディレクトリ」に移動すると、これらのアイテムのリソースの場所が失われ、ロードできなくなります。

このソリューションをCSSに拡張するにはどうすればよいですか?

  • をHTMLでCSSを埋め込む:ソリューションは避けなければならないと述べました。私は個人的にこれを避けます。
  • ハードコードされたURLを使用。私のローカルセットアップでは、テスト用のApache(mod_wsgi)を使って 'localhost/project'を使用するのに対し、デプロイメントにはproject.comを使う傾向があるため、これはうまく動作しません。

アイデア?

答えて

19

あなたは相対的な経路に問題があると言ったが、あなたが意味するものは正確に理解できないと言った。

同じ問題が発生しましたが、これを解決するために相対パスが使用されています。念頭に置いておくべきことは、展開するときに、イメージが(明らかに)CSSファイルと同じパスにとどまる必要があることだけです。

私の一言で言えば、セットアップ:私はまだDjangoの1.2ジャンゴ-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"), 
) 

私はサーブ../images/logo.pngの画像を参照している{{ STATIC_URL }}css/style.cssのCSS。

と私のプロジェクトは、次のようになります。

project_dir 
    ... 
    stuff 
    static_media 
    ... 
    css 
    images 

は、ご質問があれば私に教えてください、と私は明確でしょう。

+0

私は確信していませんが、あなたは答えました.cssファイルに関連するCSSの 'background-image' URLか、ページが提供されているURLですか?もし前者がソートされていれば、私があなたが概説したものを正確に使うことができるからです。 –

+0

ちょうどそれをテストしました - 相対的なCSSで動作するようです。私はそれに満足しています。ダニを! –

+0

@Johnは、あなたのどこかで定義されたPROJECT_ROOTであるか、Djangoによって現在のProjectルート(あなたのmanage.pyがどこにあるか)として自動的に定義されます。 PROJECT_ROOTを自分で定義している場合は、開発環境にあるのか、(ディレクトリ構造としての)プロダクション環境にあるのかに基づいて変更する必要があります。 – David

1

[OK]を、ジョンのソリューション@に何か問題がある場合、私は知りませんが、それは私に働いていなかった

はその後、私はCSS

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

にこのコードを置きます
<link rel="stylesheet" href="{{ STATIC_PREFIX }}css/main.css"> 

希望すると助かります!

+0

これはあなたのすべてのスタイルヒストリがテンプレートとして解析されなければならないことを意味します。それらをキャッシュすることを考えてください! – Stefano

関連する問題