CSSファイルのDjangoメディアURL
-
06-07-2019 - |
質問
djangoテンプレートでは、次のことを行うのが一般的です:
<img src="{{ MEDIA_URL }}/img/someImage.jpg">
テンプレートとして提供されないCSSファイルでこれをどのように実現しますか?
.someClass {
/* can't do this this */
background: url("{{ MEDIA_URL }}/img/someImage.jpg");
/* either this */
background: url("http://media.domain.com/img/someImage.jpg");
/* or this */
background: url("/django_static_media/img/someImage.jpg");
/* can't do both... what to do? */
}
メディアサブドメインから、またはオフライン作業中にファイルを提供し、django静的ビューとして直接提供する機能が必要です。しかし、CSSファイルはテンプレートとして処理されず、 MEDIA_URL
コンテキスト変数を使用できないため、問題です。
解決策は何ですか?
編集:静的メディアファイルは実際には別のメディアサブドメインに配置されているため、相対パスの使用を無効にしているため、問題が発生することに注意してください。わかった、ありがとう!
解決
cssファイルはどこから提供されますか?これは通常、次のような一般的なメディア構造の問題ではありません。
media/
images/
css/
js/
(または同様)は、画像の相対ファイルパスを許可します。例:
background: url('../images/foo.png');
相対的なファイルパスに対応するためにメディアフォルダー構造を変更する準備ができていない場合は、オフライン時にセカンダリcssファイルを使用して、テンプレート内からcss宣言を上書きする以外に選択肢がない場合があります。
{% if DEBUG %}
<link rel="stylesheet" href="{{ MEDIA_URL }}css/offline-mode.css" />
{% endif %}
もちろん、最初のオプションはもっときれいです。
他のヒント
申し訳ありませんが、答えは気に入らないでしょう。
同じ問題があります:
静的に提供されるCSSファイルでこれを行う簡単な方法はありません。
私がしていること:
- デバッグサーバー、ローカルで動作、ローカルで配信されるメディア
- プロダクションサーバーは、Amazon S3の商用w / mediaのどこかにホストされています
- settings.pyファイルは、ホスト名チェックを介してMEDIA_URL(DEBUGなど)を自動設定します(本番とローカル/ホーム/デバッグを区別するため)
- HTMLファイルにはすべてcssリンクがあります {{MEDIA_URL}}(+ RequestContext ビューのコンテキスト)
- 絶対パス名が好きなので、&quot; update_s3&quot;スクリプト: (1)は、各CSSファイルを一時的に修正して修正します 'url(&quot; / media' to 'url(&quot; s3.mydomain.com/media'および (2) / mediaディレクトリをAmazon S3に更新/アップロードします
その後、本番環境に移動してsvn update&amp;を実行しますWSGIファイルをタップ&amp;検証
CSSファイルで(画像ファイルの)相対パスを使用することは、実行可能なオプションではありませんか?
ファイルでテンプレートディレクティブを使用する場合、なぜテンプレートを介して提供されないのですか?