2012-02-15 12 views
3

問題は、django-compressorが.jsファイルにコンパイルするcoffeescriptファイルで参照されたときに{{ STATIC_URL }}が正しく読み込まれないという問題です。私のDjangoテンプレートで Djangoのテンプレート変数をdjango-compressorで使用する

、私は

$('#test').prepend '<img src="{{ STATIC_URL }}images/image.png" />' 

を持ってstuff.coffee

//this loads fine 
{{ STATIC_URL }} 
{% load compress %} 
{% compress js %} 

//STATIC_URL in here does not load 
<script type="text/coffeescript" charset="utf-8" src="/static/stuff.coffee" /> 

{% endcompress %} 

を持って次にブラウザでレンダリングされたHTMLは、このように私の質問は、どのように

/static/ 
<img id="theImg" src="{{ STATIC_URL }}images/image.png"> 

ですDjangoにcoffeescriptファイルの{{ STATIC_URL }}を認識させるようにしますか?助けてくれてありがとう!

答えて

3

あなたの[.js|.coffee]ファイルはdjangoテンプレートではなく、評価されません。 Djangoのテンプレートレンダラーでスクリプトを前処理するか、htmlテンプレートで変数を設定して、javascriptウィンドウプロパティに割り当てる必要があります。例えば:あなたのDjangoテンプレートで

:あなたのstuff.coffee

window.staticUrl = "{{ STATIC_URL }}"; 

{% load compress %} 
{% compress js %} 

//STATIC_URL in here does not load 
<script type="text/coffeescript" charset="utf-8" src="/static/stuff.coffee" /> 

{% endcompress %} 

:役に立つ応答のための

$('#test').prepend "<img src="#{window.staticUrl}images/image.png" />" 
+0

感謝。どのようにしてテンプレートレンダリングでスクリプトを前処理できますか?私はグーグルでは、短くなった。これは理想的な解決策のようです。私はまたプロパティにSTATIC_URLを割り当てようとしました。しかし、それはコンパイルされたCoffeeScriptコードによって取り上げられることはありません。その理由は、window.staticUrlが既にコンパイルされたCoffeeScriptコードの一部を置き換えることができないからです。 – Alexis

+0

文字列が '' 'で引用されていることがわかりました。つまり、CS'#{} 'スタイルのプレースホルダは評価されません。さて、それは動作するはずです。 'staticUrl'プロパティは、' prepend'呼び出しを発行するときに評価されます。 前処理を最初に行うにはどんなトリッキーが必要かわかりません。 –

+0

ありがとうございました! – Alexis

関連する問題