为knockout.js设计的超级简单的Django模型视图
项目描述

django-knockout-modeler [](https://travis-ci.org/Miserlou/django-knockout-modeler) [](https://pypi.python.org/pypi/django-knockout-modeler/)
==============
**django-knockout-modeler**使得在使用knockout.js与Django模型一起使用变得超级简单。这对于拥有许多不同模型的项目、拥有许多不同字段或两者兼而有之的项目来说都非常棒。它可以用于原型设计复杂应用程序以及直接在简单模板中直接使用。
**django-knockout-modeler**将以下内容转换成这样:
```python
class MyObject(models.Model)
myNumber = models.IntegerField()
myName = models.CharField()
myObjects = MyObject.objects.all()
```
变成这样
```javascript
var MyObjectData = [{
"myNumber": 666,
"myName": "Gabe Newell"
}];
function MyObject(data) {
myNumber = ko.observable(),
myName = ko.observable()
}
function MyObjectViewModel() {
var self = this;
self.myobjects = ko.observableArray(MyObjectData);
self.addMyObject = function(myobject) {
self.myobjects.push(myobject);
};
self.removeMyObject = function(myobject){
self.myobjects.remove(myobject)
};
self.sortMyObjectsAsc = function(){
self.myobjects(self.myobjects().sort(function(a, b) {
return a.myNumber>b.myNumber?-1:a.myNumber }));
};
self.sortMyObjectsDesc = function(){
self.myobjects(self.myobjects().sort(function(a, b) {
return a.myNumberb.myNumber?1:0;
}));
};
}
ko.applyBindings(new MyObjectViewModel(), $('#myobjects')[0]);
```
只需这样!
```django
{{ myObjects|knockout }}
```
快速开始
------------
0. 安装 django-knockout-modeler
```python
pip install django-knockout-modeler
```
1. 将 'knockout-modeler' 添加到你的 INSTALLED_APPS 设置中,如下所示
```python
INSTALLED_APPS = (
...
'knockout_modeler',
)
```
2. 在你的 HTML 中包含 Knockout.js
```html
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js'></script>
```
4. Knockout 你的 QuerySet
```html
{% load knockout %}
<script>
{{ myObjects|knockout }}
</script>
```
5. 模板化你的结果
```html
<script type="text/html" id="myTemplate">
<div>
<h2><span data-bind="text: myName"></span></h2>
<h3><span data-bind="text: myNumber"></span></h3>
</div>
</script>
```
6. 遍历你的绑定数据如下
```html
<div id="myobjects">
<div data-bind="template: { name: 'myTemplate', foreach: myobjects }"></div>
</div>
```
简单用法
---------
**django-knockout-modeler** 可以直接在模板中使用来生成 knockout 模型和准备好的数据,或者你可以选择其中一个。要将 QuerySet 直接放入 django 模板作为 Knockout 对象,你可以这样做
```django
{{ myObjects | knockout }}
```
要单独获取数据对象,你可以这样做
```django
{{ myObjects | knockout_data }}
```
同样,如果你想从 api 加载数据,你可以只获取模型,如下所示
```django
{{ myObjects | knockout_model }}
```
甚至只是绑定
```django
{{ myObjects | knockout_bindings }}
```
程序性用法
---------
首先,导入它!
```python
from knockout_modeler.ko import ko, ko_data, ko_model, ko_json, ko_data
```
要获取整个模板,你可以这样做
```python
ko_s = ko(your_query_set)
```
要获取只是数据字符串,你可以这样做..
```python
ko_s = ko_data(your_query_set)
```
或者..
```python
ko_s = ko_json(your_query_set)
```
出人意料的是,你也可以对模型字符串做同样的事情
```python
ko_s = ko_model(YourModel)
```
自定义字段集也是允许的
```python
fields = ['custom', 'fieldset', 'allowed']
ko_s= ko(entries, fields)
```
访问控制
----------
如果你不想将整个模型暴露给 Knockout,你可以在你的模型中定义一个函数
```python
def knockout_fields(self)
return['name', 'number']
```
默认情况下,它使用对象的 __to_dict()__ 方法中的键。对于计算属性,你可以使用 Python 的 __property__ 函数。
排序
----------
django-knockout 提供了一些方便的方法来排序你的数据。默认情况下,它将使用对象的 'id' 字段,但你也可以定义自己的比较器如下所示
```python
@classmethod
def comparator(self)
return 'value'
```
如果你没有定义比较器,'id' 必须在你的 knockout_fields 中。
多模型支持
----------
django-knockout 已经准备好同时使用多种类型的数据,因为绑定发生在特定对象上
```javascript
ko.applyBindings(new MyObjectViewModel(), $('#myobjects')[0]);
```
这意味着在你的 HTML 模板中的某个地方,你需要有一个具有该 id 的对象,如下所示
```html
<div id="myobjects">
<div data-bind="foreach: myobjects">
User <span data-bind="text: myName"></span> is number <span data-bind="text: myNumber"></span>.
</div>
</div>
```
这对于原型设计很有用,但对于更复杂的应用程序,可能需要使用 [master ViewModel](http://stackoverflow.com/a/9294752/1135467) 技术。
多数据支持
----------
如果你正在使用多个相同类型的 QuerySet,你需要为数据变量定义一个自定义名称。
```django
{{ myObjects | knockout_data:'MyNamedObjectsData' }}
```
你也可以传递字符串 ",safe" 来表示数据已经被清理。你必须也使用 'safe' 模板标签
```django
{{ myObjects | knockout_data:'MyNamedObjectsData,safe'|safe }}
```
问题
-------
可能还有更多可以做的事情来改进这个。如果你发现任何问题,请提交问题!
django-knockout-modeler [](https://travis-ci.org/Miserlou/django-knockout-modeler) [](https://pypi.python.org/pypi/django-knockout-modeler/)
==============
**django-knockout-modeler**使得在使用knockout.js与Django模型一起使用变得超级简单。这对于拥有许多不同模型的项目、拥有许多不同字段或两者兼而有之的项目来说都非常棒。它可以用于原型设计复杂应用程序以及直接在简单模板中直接使用。
**django-knockout-modeler**将以下内容转换成这样:
```python
class MyObject(models.Model)
myNumber = models.IntegerField()
myName = models.CharField()
myObjects = MyObject.objects.all()
```
变成这样
```javascript
var MyObjectData = [{
"myNumber": 666,
"myName": "Gabe Newell"
}];
function MyObject(data) {
myNumber = ko.observable(),
myName = ko.observable()
}
function MyObjectViewModel() {
var self = this;
self.myobjects = ko.observableArray(MyObjectData);
self.addMyObject = function(myobject) {
self.myobjects.push(myobject);
};
self.removeMyObject = function(myobject){
self.myobjects.remove(myobject)
};
self.sortMyObjectsAsc = function(){
self.myobjects(self.myobjects().sort(function(a, b) {
return a.myNumber>b.myNumber?-1:a.myNumber
};
self.sortMyObjectsDesc = function(){
self.myobjects(self.myobjects().sort(function(a, b) {
return a.myNumber
}));
};
}
ko.applyBindings(new MyObjectViewModel(), $('#myobjects')[0]);
```
只需这样!
```django
{{ myObjects|knockout }}
```
快速开始
------------
0. 安装 django-knockout-modeler
```python
pip install django-knockout-modeler
```
1. 将 'knockout-modeler' 添加到你的 INSTALLED_APPS 设置中,如下所示
```python
INSTALLED_APPS = (
...
'knockout_modeler',
)
```
2. 在你的 HTML 中包含 Knockout.js
```html
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js'></script>
```
4. Knockout 你的 QuerySet
```html
{% load knockout %}
<script>
{{ myObjects|knockout }}
</script>
```
5. 模板化你的结果
```html
<script type="text/html" id="myTemplate">
<div>
<h2><span data-bind="text: myName"></span></h2>
<h3><span data-bind="text: myNumber"></span></h3>
</div>
</script>
```
6. 遍历你的绑定数据如下
```html
<div id="myobjects">
<div data-bind="template: { name: 'myTemplate', foreach: myobjects }"></div>
</div>
```
简单用法
---------
**django-knockout-modeler** 可以直接在模板中使用来生成 knockout 模型和准备好的数据,或者你可以选择其中一个。要将 QuerySet 直接放入 django 模板作为 Knockout 对象,你可以这样做
```django
{{ myObjects | knockout }}
```
要单独获取数据对象,你可以这样做
```django
{{ myObjects | knockout_data }}
```
同样,如果你想从 api 加载数据,你可以只获取模型,如下所示
```django
{{ myObjects | knockout_model }}
```
甚至只是绑定
```django
{{ myObjects | knockout_bindings }}
```
程序性用法
---------
首先,导入它!
```python
from knockout_modeler.ko import ko, ko_data, ko_model, ko_json, ko_data
```
要获取整个模板,你可以这样做
```python
ko_s = ko(your_query_set)
```
要获取只是数据字符串,你可以这样做..
```python
ko_s = ko_data(your_query_set)
```
或者..
```python
ko_s = ko_json(your_query_set)
```
出人意料的是,你也可以对模型字符串做同样的事情
```python
ko_s = ko_model(YourModel)
```
自定义字段集也是允许的
```python
fields = ['custom', 'fieldset', 'allowed']
ko_s= ko(entries, fields)
```
访问控制
----------
如果你不想将整个模型暴露给 Knockout,你可以在你的模型中定义一个函数
```python
def knockout_fields(self)
return['name', 'number']
```
默认情况下,它使用对象的 __to_dict()__ 方法中的键。对于计算属性,你可以使用 Python 的 __property__ 函数。
排序
----------
django-knockout 提供了一些方便的方法来排序你的数据。默认情况下,它将使用对象的 'id' 字段,但你也可以定义自己的比较器如下所示
```python
@classmethod
def comparator(self)
return 'value'
```
如果你没有定义比较器,'id' 必须在你的 knockout_fields 中。
多模型支持
----------
django-knockout 已经准备好同时使用多种类型的数据,因为绑定发生在特定对象上
```javascript
ko.applyBindings(new MyObjectViewModel(), $('#myobjects')[0]);
```
这意味着在你的 HTML 模板中的某个地方,你需要有一个具有该 id 的对象,如下所示
```html
<div id="myobjects">
<div data-bind="foreach: myobjects">
User <span data-bind="text: myName"></span> is number <span data-bind="text: myNumber"></span>.
</div>
</div>
```
这对于原型设计很有用,但对于更复杂的应用程序,可能需要使用 [master ViewModel](http://stackoverflow.com/a/9294752/1135467) 技术。
多数据支持
----------
如果你正在使用多个相同类型的 QuerySet,你需要为数据变量定义一个自定义名称。
```django
{{ myObjects | knockout_data:'MyNamedObjectsData' }}
```
你也可以传递字符串 ",safe" 来表示数据已经被清理。你必须也使用 'safe' 模板标签
```django
{{ myObjects | knockout_data:'MyNamedObjectsData,safe'|safe }}
```
问题
-------
可能还有更多可以做的事情来改进这个。如果你发现任何问题,请提交问题!
项目详情
关闭
哈希值 for django_knockout_modeler-0.11.0-py2-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1e76532fef8b93f9a927cbfb7e31edf594c47a40556a91d5d9a5373d1646158f |
|
MD5 | 0866aa7aebbf0c442ca3808f71ea4711 |
|
BLAKE2b-256 | a783afe6dc0db0a76683144522687834705c89c1da3cc1ca16bdca818a2928c2 |