Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Django管道的JST_Django_Backbone.js_Django Pipeline - Fatal编程技术网

通过Django管道的JST

通过Django管道的JST,django,backbone.js,django-pipeline,Django,Backbone.js,Django Pipeline,我正在创建一个主干/Django应用程序,我想知道如何在主干视图中实现驻留在不同文件中的模板。从Rails开始,我习惯于使用JST,它允许我有一个文件夹结构,如 -js -backbone -templates template1.jst template2.jst 据我所知,应该可以使用相同的方法 但我发现实施起来很困难 我已将以下行添加到我的设置.py STATICFILES_STORAGE = "pipeline.storage.Pipeline

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

 -js
   -backbone
     -templates
      template1.jst
      template2.jst
据我所知,应该可以使用相同的方法 但我发现实施起来很困难

我已将以下行添加到我的
设置.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管道的用途,或者我只是在配置中遗漏了什么?

似乎您也应该添加“js/backbone/templates/.jst”,因为“js/backbone/templates/*/*.jst”将只匹配子文件夹中的模板。

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

管道允许您将javascript模板与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/templates/app/footer.jst”上有一个模板,您可以通过以下方式在javascript代码中访问该模板:

template: window.JST['app_footer']
template: window.JST['footer']
或者如果你做了类似的事情:

'source_filenames': (
        'js/templates/app/*.jst',
        )
OR
'source_filenames': (
        'js/templates/app/footer.jst',
        )
您在“js/templates/app/footer.jst”上有一个模板,您可以通过以下方式在javascript代码中访问该模板:

template: window.JST['app_footer']
template: window.JST['footer']
请注意,您需要包含第一个“*”中的模板名称

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

如果要使用“JST”以外的其他属性名,则可以使用settings.py中的以下设置来更改它

PIPELINE_TEMPLATE_NAMESPACE = 'window.Templates'

现在,您可以访问窗口中的模板。模板对象而不是窗口中的对象。JST

您是否在任何地方定义了“输出文件名”,如下所述: