jul*_*jul 9 django jquery pagination
我正在使用Django jQuery与jQuery.我可以序列化分页对象的对象列表,但我想序列化整个对象以获得更多数据(页码,总页数......).如何序列化整个分页对象?
谢谢
JavaScript的
function getRestaurants(query) {
$.post("/getRestaurant/", query,
function(data) {
/* do stuff with data */
},"json" );
}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我只需要为此制作一个hacky解决方案,所以我会将其作为答案发布 - 欢迎任何改进:
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
Run Code Online (Sandbox Code Playgroud)
我的建议是丢弃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))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4222 次 |
最近记录: |