为模型生成列表视图的最简单方法是什么,可点击标题和搜索(过滤)字段,或多或少像管理网站一样?我读了一些关于通用视图的内容,但我没有看到一个简单的解决方案。
答案 0 :(得分:4)
通用视图非常适合创建这种功能。然后可以使用jQuery和DataTables等javascript插件在客户端执行表格排序,搜索和分页。
要实现这一点,您需要定义一个通用视图并将其包含在urls.py中:
from django.views.generic import ListView
from exampleapp.models import BlogPost
class BlogPostListView(ListView):
""""Class that extends generic ListView"""
template_name = "list.html"
def get_queryset(self):
return BlogPost.objects.filter(published=True)
urlpatterns = patterns('',
url('^list/$', BlogPostListView.as_view() ),
)
其他所有内容都在模板文件中完成。下面的代码显示一个包含3列的表,并初始化DataTables插件。将添加分页按钮和搜索输入,并且可以单击标题单元格以按给定列排序。
<script type="text/javascript" language="javascript" src="http://datatables.net/release-datatables/media/js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="http://datatables.net/release-datatables/media/js/jquery.dataTables.js"></script>
<script>
$(document).ready(function(){
// Initalize DataTables on <table> tag with id="example"
$('#example').dataTable();
});
</script>
<table id="example">
<thead> <!-- header row -->
<tr>
<td>ID</td>
<td>column1</td>
<td>column2</td>
</tr>
</thead>
<tbody> <!-- data -->
{% for item in object_list.all %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.column1 }}</td>
<td>{{ item.column2 }}</td>
</tr>
{% endfor %}
</tbody>
</table>