layui-table的相关问题
layui--table格式:
这里介绍一个非demo的写法:
1.在html中直接写table,而不是在js中渲染。这里注意将lay-data设置一下,绑定一个id,方便js中重载绑定这个table
lay-data="{page:true, id:'mainList'}"
lay-filter="mainList" lay-size="sm">
<th lay-data="{checkbox:true, fixed: true}">
<th lay-data="{field:'name',sort: true,width:250}">项目名称
<th lay-data="{field:'establish_dept',sort: true,width:200}">发布部门
<th lay-data="{field:'establish_time',width:150}">发布时间
<th lay-data="{field:'startdate',width:150}">开始时间
<th lay-data="{field:'enddate',width:150}">结束时间
<th lay-data="{field:'project_level',width:10}">项目级别
</table>
然后在js中重载table:
var config = {};//table的参数,如搜索key,点击tree的id
var mainList =function (options) {//前面注意要定义layui.table,在layui.use里也记得添加table
if (options != undefined) {
$.extend(config, options);
}
table.reload('mainList',
{
elem:"#mainList",
url: urls,
where: config,
response:{//response定义返回json数据的状态码,返回信息,返回数据行数和数据流
statusName:"code",//数据状态的字段名称,默认“code”
statusCode:0,//成功的状态码
msgName:"msg",//状态信息名称,默认msg
countName:"count",//数据总数字段名称,就是table显示多少行,默认count
dataName:"data",},//数据列表
});
};
mainList();
然后,在后端要返回一个官方定义的table返回数据。不符合table的数据格式要求就会报错,所以要对后端object.all的数据进行处理:
def inquiry(request):
if request.method =="GET":
projects = EstablishProject.objects.all()//这里只是一个QuerrySet数据格式
data = []#table这里需要的data是一个列表,每一行数据是一个元素,每个元素又是个字典
detail_data = {}#单行数据用detail_data表示,然后通过for循环不断更新detail_data,存入data列表中
count =0
for detailin projects:
detail_data = dict()#对每一次的for循环,都先清空detail_data,不然数据可能无法进行更新
detail_data["id"] = detail.id
detail_data["name"] = detail.name
detail_data["startdate"] = str(detail.startdate)
detail_data["enddate"] = str(detail.enddate)
detail_data["establish_dept"] = detail.establish_dept
detail_data["establish_time"] = str(detail.establish_time)
detail_data["project_level"] = detail.project_level
print(detail_data)
data.append(detail_data)
count = count +1
postmsg = {"code":0, "msg":"", "count": count, "data": data}
print(postmsg)
return HttpResponse(json.dumps(postmsg), content_type="application/json")
layui的table问题:
在Django中,使用demo中的写法,即通过把后端转化为json数据然后异步动态加载数据。这里相较于在html中写一个内嵌的python语句进行一个for循环get到数据来讲要高级一点,而且后面再做table重载也更加方便,但是我们在做的时候,发现报错:返回的数据状态异常:paramerror
然后我看了很多文章,这里将所有可能出现这个报错的原因都总结一下。
1.后端返回的数据不是json格式的,layui.table需要json格式的数据,不然只能做成同步提交的静态页面
2.后端返回的数据不是按照layui的table数据流要求,详见:官方定义的table返回数据
3.数据不能显示,print打印不出数据:原因可能是直接用object.all()返回的东西放到data[]里,这肯定不行的,因为querryset格式这里是列表是不认的(因为我print列表没有数据)。需要写个循环通过字典来获取所有数据。