2012-02-15 264 views
3

问题是{{ STATIC_URL }}在django-compressor编译为.js文件的coffeescript文件中引用时未能正确加载。在Django中使用Django中的模板变量与django-compressor

在我的Django的模板,我有

//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 %} 

stuff.coffee

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

然后在浏览器中呈现的HTML是

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

因此,我的问题是,如何是否让Django识别coffeescript文件中的{{ STATIC_URL }}?非常感谢您的帮助!

回答

3

您的[.js|.coffee]文件不是django模板,不会被评估。要么你需要用django的模板渲染器预处理脚本,要么将变量设置为html模板,并将其分配给javascript窗口属性。例如: -

在你的Django模板:

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 %} 

在你stuff.coffee

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

感谢您的帮助的回应。如何使用模板呈现预处理脚本?我用Google搜索了一下,但没有结果。这似乎是理想的解决方案。我也尝试将STATIC_URL分配给属性。但是,它并没有被编译好的CoffeeScript代码拾取。我认为原因是window.staticUrl在编译完成后无法代替部分CoffeeScript代码。 – Alexis 2012-02-15 13:33:04

+0

它碰到了我在'''中引用了字符串,这意味着CS'#{}'样式的占位符将不会被评估。现在,它应该工作。当您发出'prepend'调用时,'staticUrl'属性将被评估。 我不确定首先要做预处理会需要什么样的诡计。 – 2012-02-15 13:49:35

+0

感谢它的工作!是否js解释''''和'''有区别? – Alexis 2012-02-16 15:44:57