2014-02-24 109 views
1

我正在創建一個Backbone/Django應用程序,我想知道如何實現駐留在Backbone視圖的不同文件中的模板。從Rails的我習慣了使用JST這讓我有一個文件夾結構類似JST通過Django管道

-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的用途,還是僅僅在配置中丟失了某些東西?

+0

有你所定義的「output_filename」任何地方,這裏要注意:http://django-pipeline.readthedocs.org/en/latest/templates.html – bejonbee

回答

0

看來你也應該加上 'JS /骨幹網/模板/ .jst' 爲 'JS /骨幹網/模板/ * /*.jst' 將在子文件夾中僅匹配模板。

2

不,你沒有誤解django管道。您將能夠訪問骨幹代碼中的JavaScript模板。在我給你答案之前,讓我們看看django-pipeline文檔必須說的。

流水線允許您使用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' %} 

現在的文件說:

這將可以從你的JavaScript代碼通過window.JST

所以,你將有一個名爲「窗口」一個全局對象,你會能夠使用其'JST'屬性訪問模板。 JST屬性的值是另一個JavaScript對象。此對象的屬性是模板的名稱,其值是模板。您的模板名稱將取決於您如何將模板包含在設置文件中。

例如,如果在你的設置文件中包含的是模板:

'source_filenames': (
     'js/templates/**/*.jst', 
     ) 

,你不得不在「JS /模板/應用/頁腳的模板。JST「你可以訪問該模板在JavaScript代碼通過以下方式:

template: window.JST['app_footer'] 

或者,如果你不喜歡的東西:

'source_filenames': (
     'js/templates/app/*.jst', 
     ) 
OR 
'source_filenames': (
     'js/templates/app/footer.jst', 
     ) 

,你不得不在模板」 JS /模板/應用/footer.jst」,你可以訪問該模板在JavaScript代碼通過以下方式:

template: window.JST['footer'] 

注意,你需要包括從第一模板的名稱‘*’

如果仍然不能確定,那麼你可以檢查window.JST對象在JavaScript控制檯檢查其屬性。

如果您想使用「JST」等其他一些屬性名,那麼你可以使用你的settings.py以下設置

PIPELINE_TEMPLATE_NAMESPACE = 'window.Templates' 

現在,您可以訪問您的模板將在更改window.Templates對象,而不是在window.JST是