项目中需要实现数据查询,基于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>