Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 有没有办法在Django中序列化分页对象?_Jquery_Django_Pagination - Fatal编程技术网

Jquery 有没有办法在Django中序列化分页对象?

Jquery 有没有办法在Django中序列化分页对象?,jquery,django,pagination,Jquery,Django,Pagination,我在jQuery中使用Django分页。我可以序列化分页对象的对象列表,但我希望序列化整个对象以获得更多数据(页码、总页数…)。 如何序列化整个分页对象 谢谢 javascript function getRestaurants(query) { $.post("/getRestaurant/", query, function(data) { /* do stuff with data */ }

我在jQuery中使用Django分页。我可以序列化分页对象的对象列表,但我希望序列化整个对象以获得更多数据(页码、总页数…)。 如何序列化整个分页对象

谢谢

javascript

function getRestaurants(query) {

        $.post("/getRestaurant/", query,
            function(data) {
                /* do stuff with data */
             },"json" );
}
views.py

def getRestaurant(request):

    results = Restaurant.objects.all()
    paginator = Paginator(restaurants, 5)

    # Make sure page request is an int. If not, deliver first page.
    try:
        page = int(request.POST.get('page','1'))
    except ValueError:
        page = 1

    # If page request (9999) is out of range, deliver last page of results.
    try:
        results = paginator.page(page)
    except (EmptyPage, InvalidPage):
        results = paginator.page(paginator.num_pages)

    data=serializers.serialize("json", results.object_list) #I'd like to serialize the whole results object

    return HttpResponse(data)

我刚刚不得不为此制定一个黑客解决方案,因此我将把它作为一个答案发布-欢迎任何改进:

from django.core import serializers
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.core.serializers.json import DjangoJSONEncoder
from django.http import HttpResponse
from django.utils import simplejson  
from types import MethodType 

from mysite.tasks.models import Task

PER_PAGE = 20

def list(request):
    """
    Return a paginated JSON object.
    """

    paginator = Paginator(tasks.objects.all(), PER_PAGE) 
    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    # If page request (9999) is out of range, deliver last page of results.
    try:
        pagetasks = paginator.page(page)
    except (EmptyPage, InvalidPage):
        pagetasks = paginator.page(paginator.num_pages)

    # Dump the Page attributes we want to a dictionary
    serializedpage = {}
    wanted = ("end_index", "has_next", "has_other_pages", "has_previous",
            "next_page_number", "number", "start_index", "previous_page_number")
    for attr in wanted:
        v = getattr(tasks, attr)
        if isinstance(v, MethodType):
            serializedpage[attr] = v()
        elif isinstance(v, (str, int)):
            serializedpage[attr] = v

    # Serialise the queryset to plain Python objects 
    # and add them to the serialized page dictionary
    pythonserializer = serializers.get_serializer("python")()
    serializedpage["object_list"] = pythonserializer.serialize(pagetasks.object_list, 
            fields=('task_id', 'task_data')) 

    # Dump it as JSON using the Django encoder
    response = HttpResponse(mimetype="application/json")
    simplejson.dump(serializedpage, response, cls=DjangoJSONEncoder)
    return response                               

提供了一个特殊的功能,我想这正是您想要的。

我的建议是放弃paginator对象并自己切片查询集。通过这种方式,您可以轻松地序列化输出

例如,如果您想将注释列表序列化为json格式,您可以这样做:

comment_list = ArticleComment.objects.filter(article__id=int(_id), is_public=True).values('created', 'tag', 'content', 'author').order_by('-created')   
    start = (page_num - 1) * COMMENTS_PER_PAGE
    end = page_num * COMMENTS_PER_PAGE
    return HttpResponse(json.dumps(list(comment_list[start:end]), cls=DjangoJSONEncoder))

我不确定是否有效,但您可以尝试使用
PaginationSerializer
在DRF3.1版本中被删除。