2012-02-15 3 views
3

django-compressor가 .js 파일로 컴파일하는 coffeescript 파일에서 참조 될 때 {{ STATIC_URL }}이 제대로로드되지 않는 문제가 있습니다. 내 장고 템플릿에서 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"> 

입니다 장고는 coffeescript 파일에 {{ STATIC_URL }}을 인식하게합니까? 어떤 도움을 주셔서 감사합니다!

답변

3

[.js|.coffee] 파일은 장고 템플릿이 아니며 평가되지 않습니다. 어느 쪽이든 django의 템플릿 렌더러로 스크립트를 전처리하거나 html 템플릿에 변수를 설정하고 자바 스크립트 윈도우 속성에 할당해야합니다. 예컨대 : 당신의 장고 템플릿에서

: 당신의 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

관련 문제