ListView变量与方法请看:

前端样式使用Bootstrap3:

Jinja2模板系统文档:

1、views.py:

from django.shortcuts import renderfrom django.http.response import HttpResponsefrom django.views.generic import  View, ListView#modelfrom models import *#pythonimport urllib2......class ServerListIndex(ListView):    context_object_name = 'serverlist'    template_name = 'serverlist.jinja.html'    paginate_by = 50    model = ServerList

ListView只需要传好变量即可使用:

context_object_name是数据库搜索出来的结果存放的变量名字,用于模板循环显示

template_name加载该html文件

paginate_by设置分页中每一页的记录数目

model定义从哪份model中查询

2、urls.py:

urlpatterns = patterns('',    url(r'^test/$', TemplateView.as_view(template_name='base2.jinja.html')),    url(r'update/$', Update_ServerList.as_view(), name="update_serverlist"),    url(r'^$', ServerListIndex.as_view(), name='serverlist'),)

3、模板,模板我采用了继承,父模板是整个网站的框架,有点长不好放出来,这里只放子模板:

serverlist.jinja.html:

{% extends "base2.jinja.html" %}{% set active_page = 'serverlist' -%}{% block body %}	
   平台 服务器名称                    合服列表 开服时间 域名/IP    {% for server in serverlist %}    {
{ server.plat }} {
{ server.server_num }}服-{
{ server.server_name }}                        {
{ server.hefu_range.replace('-',',') }} {
{ server.open_time }} {
{ server.domain }}
{
{ server.dx_ip }}/{
{ server.lt_ip }}
执行命令    {% endfor %}         
            
                
                    
  • «
  •                     {% if page_obj.has_previous() %}                        
  • 上一页
  •                     {% else %}                        
    上一页                    {% endif %}                    {% for i in page_obj.paginator.page_range %}                        
    { { i }}                    {% endfor %}                    {% if page_obj.has_next() %}                        
  • 下一页
  •                     {% else %}                        
    下一页                    {% endif %}                    
  • »
  •                             
             {% endblock %}

    page_obj是分页对像实例,这个名字是ListView默认生成的

    page_obj的变量:

    page_obj.paginator.page_range:所有分页的number,是一个list

    page_obj.number:当前分页的页码

    page_obj.paginator.num_pages:总分页数,就是一共有多少页

    page_obj的方法:

    page_obj.has_previous():判断是否有上一页

    page_obj.previous_page_number():返回上一页的number

    page_obj.has_next():判断是否有下一页

    page_obj.next_page_number():返回下一页的number

    现在实现的效果:

    4、基本的分页是做好了,现在需要加多一个搜索的功能,

    先改造views.py:

    class ServerListIndex(ListView):    context_object_name = 'serverlist'    template_name = 'serverlist.jinja.html'    paginate_by = 50    #model = ServerList    http_method_names = [u'get',]    def get_queryset(self):        serverlist = ServerList.objects.all()        plat = self.request.GET.get('plat')        keyword = self.request.GET.get('keyword')        if plat:            serverlist = serverlist.filter(plat=plat)        if keyword:            serverlist = serverlist.filter(Q(dx_ip=keyword)|Q(lt_ip=keyword)|Q(domain=keyword))        return serverlist    def get_context_data(self, **kwargs):        context = super(ServerListIndex,self).get_context_data(**kwargs)        platlist = ServerList.objects.values('plat').annotate()        context['platlist'] = platlist        return context

    重写了get_queryset方法,达到利用get参数自定义SQL的作用

    重新get_context_data方法,相当于return render_to_response(xxx.html,{},context_instance=RequestContext(request))中的{}的内容,就是传给模板的变量

    然后把html增加一个搜索菜单:

    serverlist.jinja.html:

    {% extends "base2.jinja.html" %}{% set active_page = 'serverlist' -%}{% block body %}	
      
    --全部--                            {% for i in platlist -%}                                 
    { { i.plat }}                            {% endfor -%}      
         
    Search
       平台 服务器名称                    合服列表 开服时间 域名/IP    {% for server in serverlist -%}    { { server.plat }} { { server.server_id }}服-{ { server.server_name }}                        { { server.hefu_range.replace('-',',').strip() }} { { server.open_time }} { { server.domain }}
    { { server.dx_ip }}/{ { server.lt_ip }}
    执行命令    {% endfor -%}         
                
                    
                        
  • «
  •                     {% if page_obj.has_previous() %}                        
  • 上一页
  •                     {% else %}                        
    上一页                    {% endif %}                    {% for i in page_obj.paginator.page_range %}                        
    { { i }}                    {% endfor %}                    {% if page_obj.has_next() %}                        
  • 下一页
  •                     {% else %}                        
    下一页                    {% endif %}                    
  • »
  •                             
             {% endblock %}

    因为加多了get参数,所以网页尾部的分页还要加上GET参数

    看了下效果感觉还过得去。。