首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Django-Pipeline的JST

通过Django-Pipeline的JST
EN

Stack Overflow用户
提问于 2014-02-25 01:06:27
回答 2查看 238关注 0票数 1

我正在创建一个Backbone / Django应用程序,我想知道如何为Backbone视图实现驻留在不同文件中的模板。在Rails中,我习惯于使用JST,它允许我具有如下的文件夹结构

代码语言:javascript
复制
 -js
   -backbone
     -templates
      template1.jst
      template2.jst

据我所知,使用Django-Pipeline应该可以做到这一点,但我发现实现起来很困难。

我将以下代码行添加到我的settings.py

代码语言:javascript
复制
STATICFILES_STORAGE = "pipeline.storage.PipelineStorage"

PIPELINE_CSS_COMPRESSOR = None
PIPELINE_JS_COMPRESSOR = None

PIPELINE_JS = {
  'application': {
    'source_filenames': (
      'js/backbone/templates/**/*.jst',
    )
  }
}

我把这个添加到了base.html中

代码语言:javascript
复制
{% load compressed %}
{% compressed_js 'application' %}

我想这将允许我通过客户端上的JST对象引用我的模板,但它没有被定义。我是否误解了Django-Pipeline的用途,或者我只是在配置中遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2014-08-02 16:42:55

不,您没有误解django-pipeline。您将能够在您的主干代码中访问javascript模板。在我给你答案之前,让我们先来看看django-pipeline文档有什么要说的。

javascript Pipeline允许您将

模板与javascript视图一起使用。要使用javascript模板,只需将它们添加到PIPELINE_JS组中

因此,您可以在设置文件中将模板添加到管道中,如下所示:

代码语言:javascript
复制
PIPELINE_JS = {  
  'templates': {
     'source_filenames': (
        'js/templates/**/*.jst',
        ),
     'output_filename': 'js/templates.js'
  }
}

现在,您必须在浏览器中加载这些javascript模板。

请注意:在加载任何使用模板的javascript代码之前,您必须确保加载模板。否则,您将得到一个未定义的错误。

代码语言:javascript
复制
{% load compressed %}
{% compressed_js 'templates' %}
{% compressed_js 'other_backbone_files' %}

现在医生说:

它将通过window.JST从您的javascript代码中获得

因此,您将拥有一个名为'window‘的全局对象,并且您将能够使用其'JST’属性来访问模板。JST属性的值是另一个javascript对象。这个对象的属性是模板的名称,它的值是模板。模板的名称将取决于您在设置文件中包含模板的方式。

例如,如果在设置文件中包含以下模板:

代码语言:javascript
复制
'source_filenames': (
        'js/templates/**/*.jst',
        )

并且您在‘js/ template /app/footer.jst’中有一个模板,您可以通过以下方式在您的javascript代码中访问该模板:

代码语言:javascript
复制
template: window.JST['app_footer']

或者如果你做了类似这样的事情:

代码语言:javascript
复制
'source_filenames': (
        'js/templates/app/*.jst',
        )
OR
'source_filenames': (
        'js/templates/app/footer.jst',
        )

并且您在‘js/ template /app/footer.jst’中有一个模板,您可以通过以下方式在您的javascript代码中访问该模板:

代码语言:javascript
复制
template: window.JST['footer']

请注意,您需要包括第一个'*‘中的模板名称

如果您仍然不确定,那么可以在javascript控制台中检查window.JST对象,以检查其属性。

如果您想使用'JST‘以外的其他属性名称,那么您可以使用settings.py中的以下设置来更改它

代码语言:javascript
复制
PIPELINE_TEMPLATE_NAMESPACE = 'window.Templates'

现在您可以访问window.Templates对象中的模板,而不是window.JST中的模板

票数 2
EN

Stack Overflow用户

发布于 2014-05-08 21:42:45

看起来你也应该加上‘js/ only /template/.jst’,因为‘js/only/template/*/*.jst’只会匹配子文件夹中的模板。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21994200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档