django jquery 分页 bootstrap

项目中需要实现数据查询,基于django的admin架构必然会很容易实现。不过在用户体验方面就会比较low了,因此需要自己实现类adminsite的效果。而且项目需要实现响应式所以bootstrap就成了首选。研究了一下午,基本上做好了技术准备。

1、资源

django-endless-pagination
https://github.com/frankban/django-endless-pagination  

(1)优点

支持类twitter 和 digg的效果

代码基本可读

有demo

支持lazy,性能上有保障

(2)缺点

两年前多项目了,不知道会不会有bug或者是不兼容的问题

2、快速使用

2.1 setting.py配置

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS += (
    'django.core.context_processors.request',
)

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'endless_pagination',
    'demoendless',
)

2.2 创建自己的app,或者修改已有app。

(1)先创建了测试models

# encoding: utf-8

from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _


# Create your models here.
class Person(models.Model):
	name=models.CharField(_(u'用户名'),max_length=30)

(2)修改一下urls.py

urlpatterns = patterns('',
  
	url(r'^index/','demoendless.views.index'),
	url(r'^digg/$','demoendless.views.entry_index'),

)

 备注:其实这个写法还没有发挥django 强大威力,请赏鉴django-endless-pagination中的urls 写法

 url(r'^digg/$',
        page_template('digg/page.html')(generic),
        {'template': 'digg/index.html'},
        name='digg'),

 (3)修改views.py

from __future__ import unicode_literals
from django.shortcuts import render_to_response, get_object_or_404, render
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext

from .models import Person
# Create your views here.

def index(request):
	return HttpResponse('data')



def entry_index(
        request,
        template='digg/index.html',
        page_template='digg/page.html'):
    context = {
        'entries': Person.objects.all(),
        'page_template': page_template,
    }
    if request.is_ajax():
        template = page_template
    return render_to_response(template, context, context_instance=RequestContext(request))

 备注:其中if request.is_ajax(): template = page_template 使用的非常巧妙,第一次请求肯定是get,后台就全部渲染。在查询中点击页码时,这个app肯定采用的是jquery的ajax,不过在页面的源码中没有看到。以后有时间好好研究一下

(4)templats模版

base.html模版

<!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
    <title>{% block title %}Testing project{% endblock %} - Django Endless Pagination</title>
    <link href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.1.1/css/bootstrap.min.css" rel="stylesheet">
    <link href="{{ STATIC_URL }}pagination.css" rel="stylesheet">
  </head>
  <body>
    <div class="container">
     
     <div class="row">
        {% block content %}{% endblock %}
      </div>
    </div>
    {% block js %}
      <script src="http://code.jquery.com/jquery-latest.js"></script>
      <script src="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.1.1/bootstrap.min.js"></script>
      <script src="{{ STATIC_URL }}endless_pagination/js/endless-pagination.js"></script>
    {% endblock %}
  </body>
</html>

 index.html

{% extends "base.html" %}

{% block content %}
  <div class="endless_page_template span12">
    {% include page_template %}
  </div>
{% endblock %}

{% block js %}
  {{ block.super }}
  <script>
    $.endlessPaginate();
  </script>
{% endblock %}

 page.html

{% load endless %}

{% paginate  5 entries %}
{% for object in entries %}
  <div class="well object">
    <h4>{{ object.id }}</h4>
    {{ object.name }}
  </div>
{% endfor %}
<div class="pagination pagination-centered">
  <div>{% show_pages %}</div>
</div>

 

 

 

 

 
 
posted @ 2014-11-18 15:41  springran  阅读(607)  评论(0编辑  收藏  举报