在配置django rest framework datatables时,我是否遗漏了什么;DataTables警告:表id=test-Ajax错误;
我尝试用rest框架配置数据表,当页面加载所有数据表字段(如分页、搜索和标题)时出现错误,但没有显示任何数据。原因可能是什么 序列化程序.py在配置django rest framework datatables时,我是否遗漏了什么;DataTables警告:表id=test-Ajax错误;,django,django-rest-framework,datatables,server-side,django-datatable,Django,Django Rest Framework,Datatables,Server Side,Django Datatable,我尝试用rest框架配置数据表,当页面加载所有数据表字段(如分页、搜索和标题)时出现错误,但没有显示任何数据。原因可能是什么 序列化程序.py class PermissionSerializer(serializers.ModelSerializer): class Meta: model = Permission fields = ( 'name', 'code', 'app', ) views.py from rest_framework impo
class PermissionSerializer(serializers.ModelSerializer):
class Meta:
model = Permission
fields = (
'name', 'code', 'app',
)
views.py
from rest_framework import viewsets
from .serializers import PermissionSerializer
class PermissionViewSet(viewsets.ModelViewSet):
queryset = Permission.objects.all()
serializer_class = PermissionSerializer
class ViewallPerms(View):
def get(self, request):
context = {
'a' : 'a',
}
return render(request, 'flamika_admin/view_allpermissions.html', context)
url.py
url(r'^perms/$', views.PermissionViewSet, name='perms'),
path('all-perms', login_required(views.ViewallPerms.as_view(), login_url='f_admin:admin_login'), name='all-perm'),
查看\u allpermissions.html
<script src="https://code.jquery.com/jquery-1.8.0.min.js"></script>
<div class="row">
<div class="col-sm-12 col-xs-12">
<table id="test" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th>Code</th>
<th>Name</th>
<th>App</th>
</tr>
</thead>
</table>
</div>
</div>
<script>
$(document).ready(function() {
var table = $('#test').DataTable({
"serverSide": true,
dataSrc: "",
"ajax": "{% url 'flamika_admin:perms' %}",
"columns": [
{"data": "name"},
// Use dot notation to reference nested serializers.
// This data: could alternatively be displayed with the serializer's ReadOnlyField as well, as seen in the minimal example.
{"data": "code"},
{"data": "app"},
]
});
$('.btn-decade').on('click', function() {
table.columns().search('');
var rel = $(this).attr('rel');
if (rel) {
table.columns(3).search('^' + rel + '[0-9]$', true).draw();
} else {
table.draw();
}
});
$('#albums_minimal').DataTable({
"search": {"regex": true},
"language": {"searchPlaceholder": "regular expression"}
});
});
</script>
代码
名称
应用程序
$(文档).ready(函数(){
变量表=$(“#测试”)。数据表({
“服务器端”:正确,
dataSrc:“”,
“ajax”:“{%url'flamika_admin:perms%}”,
“栏目”:[
{“数据”:“名称”},
//使用点表示法引用嵌套序列化程序。
//此数据:也可以与序列化程序的ReadOnlyField一起显示,如下面的示例所示。
{“数据”:“代码”},
{“数据”:“应用程序”},
]
});
$('.btn decade')。在('click',function()上{
table.columns().search(“”);
var rel=$(this.attr('rel');
如果(rel){
table.columns(3).search('^'+rel+'[0-9]$',true.draw();
}否则{
table.draw();
}
});
$('#相册_最小值')。数据表({
“搜索”:{“regex”:true},
“语言”:{“搜索占位符”:“正则表达式”}
});
});
请告诉我哪里出错了,这是配置服务器端数据表的正确方法吗。请纠正我。我想显示该模型中的所有数据。您忘记在ajax API调用中添加“?format=datatables”
。Datatables期望以某种方式正确显示响应,如果您正确配置了django rest framework Datatables
(遵循文档,这非常简单),库将检查format
参数是否设置为Datatables。如果未设置,则使用DRF的默认分页格式(这不适用于datatables,您的情况下),如果设置,则django rest framework datatables
将以正确的方式为datatables格式化响应
注意:所以我想提到的是,即使在js文件中,如果您想使用django的反向功能,我也会链接一个很好的库
使用此选项可反转并将?format=datatables
添加到url,也可以手动写入url。
例如
检查那里的url,确保其正确。我刚刚写了一个例子
更新:
PermissionViewSet
的url路由不正确。
正确的形式是:
url(r'^perms/$', PermissionViewSet.as_view({"get": "list"}), name="perms")
注意请求方法的映射。您忘记在ajax API调用中添加“?format=datatables”
。Datatables期望以某种方式正确显示响应,如果您正确配置了django rest framework Datatables
(遵循文档,这非常简单),库将检查format
参数是否设置为Datatables。如果未设置,则使用DRF的默认分页格式(这不适用于datatables,您的情况下),如果设置,则django rest framework datatables
将以正确的方式为datatables格式化响应
注意:所以我想提到的是,即使在js文件中,如果您想使用django的反向功能,我也会链接一个很好的库
使用此选项可反转并将?format=datatables
添加到url,也可以手动写入url。
例如
检查那里的url,确保其正确。我刚刚写了一个例子
更新:
PermissionViewSet
的url路由不正确。
正确的形式是:
url(r'^perms/$', PermissionViewSet.as_view({"get": "list"}), name="perms")
注意request方法的映射。最初我是这样尝试的。显示调试时未找到的url。所以我就这样改了。我的疑问是我实际上在使用名称空间。那么如何在url中使用?format=datatables呢?您只需在url的末尾添加?format=datatables字符串。我已经更新了答案,提供了一个库链接,并提供了一个ajax调用示例。在浏览器控制台中..错误500。我在我的url中对此进行了评论:#router=routers.DefaultRouter()#router.register(r'perms',views.PermissionViewSet)是必需的。?嗯,它不起作用,因为url路由错误。您需要将此url(r'^perms/$,PermissionViewSet.as_view({“get”:“list”}),name=“perms”)写入。这里我们提供了映射GET请求的函数。你可以删除路由器代码。这应该足够了。最初我是这样尝试的。显示调试时未找到的url。所以我就这样改了。我的疑问是我实际上在使用名称空间。那么如何在url中使用?format=datatables呢?您只需在url的末尾添加?format=datatables字符串。我已经更新了答案,提供了一个库链接,并提供了一个ajax调用示例。在浏览器控制台中..错误500。我在我的url中对此进行了评论:#router=routers.DefaultRouter()#router.register(r'perms',views.PermissionViewSet)是必需的。?嗯,它不起作用,因为url路由错误。您需要将此url(r'^perms/$,PermissionViewSet.as_view({“get”:“list”}),name=“perms”)写入。这里我们提供了映射GET请求的函数。你可以删除路由器代码。这应该足够了。