我正在创建一个Backbone / Django应用程序,我想知道如何为Backbone视图实现驻留在不同文件中的模板。在Rails中,我习惯于使用JST,它允许我具有如下的文件夹结构
-js
-backbone
-templates
template1.jst
template2.jst据我所知,使用Django-Pipeline应该可以做到这一点,但我发现实现起来很困难。
我将以下代码行添加到我的settings.py中
STATICFILES_STORAGE = "pipeline.storage.PipelineStorage"
PIPELINE_CSS_COMPRESSOR = None
PIPELINE_JS_COMPRESSOR = None
PIPELINE_JS = {
'application': {
'source_filenames': (
'js/backbone/templates/**/*.jst',
)
}
}我把这个添加到了base.html中
{% load compressed %}
{% compressed_js 'application' %}我想这将允许我通过客户端上的JST对象引用我的模板,但它没有被定义。我是否误解了Django-Pipeline的用途,或者我只是在配置中遗漏了什么?
发布于 2014-08-02 16:42:55
不,您没有误解django-pipeline。您将能够在您的主干代码中访问javascript模板。在我给你答案之前,让我们先来看看django-pipeline文档有什么要说的。
javascript Pipeline允许您将
模板与javascript视图一起使用。要使用javascript模板,只需将它们添加到PIPELINE_JS组中
因此,您可以在设置文件中将模板添加到管道中,如下所示:
PIPELINE_JS = {
'templates': {
'source_filenames': (
'js/templates/**/*.jst',
),
'output_filename': 'js/templates.js'
}
}现在,您必须在浏览器中加载这些javascript模板。
请注意:在加载任何使用模板的javascript代码之前,您必须确保加载模板。否则,您将得到一个未定义的错误。
{% load compressed %}
{% compressed_js 'templates' %}
{% compressed_js 'other_backbone_files' %}现在医生说:
它将通过window.JST从您的javascript代码中获得
因此,您将拥有一个名为'window‘的全局对象,并且您将能够使用其'JST’属性来访问模板。JST属性的值是另一个javascript对象。这个对象的属性是模板的名称,它的值是模板。模板的名称将取决于您在设置文件中包含模板的方式。
例如,如果在设置文件中包含以下模板:
'source_filenames': (
'js/templates/**/*.jst',
)并且您在‘js/ template /app/footer.jst’中有一个模板,您可以通过以下方式在您的javascript代码中访问该模板:
template: window.JST['app_footer']或者如果你做了类似这样的事情:
'source_filenames': (
'js/templates/app/*.jst',
)
OR
'source_filenames': (
'js/templates/app/footer.jst',
)并且您在‘js/ template /app/footer.jst’中有一个模板,您可以通过以下方式在您的javascript代码中访问该模板:
template: window.JST['footer']请注意,您需要包括第一个'*‘中的模板名称
如果您仍然不确定,那么可以在javascript控制台中检查window.JST对象,以检查其属性。
如果您想使用'JST‘以外的其他属性名称,那么您可以使用settings.py中的以下设置来更改它
PIPELINE_TEMPLATE_NAMESPACE = 'window.Templates'现在您可以访问window.Templates对象中的模板,而不是window.JST中的模板
发布于 2014-05-08 21:42:45
看起来你也应该加上‘js/ only /template/.jst’,因为‘js/only/template/*/*.jst’只会匹配子文件夹中的模板。
https://stackoverflow.com/questions/21994200
复制相似问题