在配置django rest framework datatables时,我是否遗漏了什么;DataTables警告:表id=test-Ajax错误;

在配置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

我尝试用rest框架配置数据表,当页面加载所有数据表字段(如分页、搜索和标题)时出现错误,但没有显示任何数据。原因可能是什么

序列化程序.py

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请求的函数。你可以删除路由器代码。这应该足够了。