如何在Django中加载自举的骨干模型

pay*_*ike 3 django collections backbone.js

当加载骨干应用程序时(对于我的应用程序,这意味着加载了页面),我需要初始收集数据,骨干文档说:

<script>
  var accounts = new Backbone.Collection;
  accounts.reset(<%= @accounts.to_json %>);
  var projects = new Backbone.Collection;
  projects.reset(<%= @projects.to_json(:collaborators => true) %>);
</script>
Run Code Online (Sandbox Code Playgroud)

我不明白这一点.这意味着我应该使用初始数据来渲染页面

{{collection_initial_data}}
Run Code Online (Sandbox Code Playgroud)

我在后端使用django,所以如何将上面的代码翻译成django模板,比如

 <script>
  var accounts = new Backbone.Collection;
  accounts.reset({{ @accounts.to_json }});
  var projects = new Backbone.Collection;
  projects.reset({{ @projects.to_json(:collaborators => true) }});
</script>
Run Code Online (Sandbox Code Playgroud)

无论如何,我对获取骨干采集的初始数据感到困惑.

mac*_*ost 5

当Backbone谈论bootstrapping时,他们正在谈论这个:

http://documentcloud.github.io/backbone/#FAQ-bootstrap

换句话说,他们说你应该在你的Django HTML模板中,在脚本标签内写出模型的内容.

例如,假设您的Django上下文有一个名为"foo_models"的变量,它包含所有foo模型的JSON表示.您需要编辑Django模板以执行以下操作:

<script>
var foo_models = new FooCollection({{foo_models}});
</script>
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以保证在加载时页面上的数据已准备就绪,并且您的JS代码可以使用JS foo_models来访问该数据.

现在,您的困惑似乎是如何首先制作foo_modelsPython/Django变量.我建议您在View逻辑中执行此操作,而不是在模板中执行此操作,因为您可以使用Python及其库的全部功能来序列化JSON.但是,如果您确实希望在视图中执行此操作,则可以使用与您指定的语法非常相似的语法来执行此操作; 看看这个SO问题的第二个答案:

Django:使用Javascript在我的模板中解析JSON