Django智能分页
分页效果
主要函数
Paginator. get_elided_page_range( number, on_each_side= 3 , on_ends= 2 )
代码部分
def events ( request) : event_list = Event. objects. all ( ) . order_by( "-level" , "-begin" ) page_number = request. GET. get( 'page' , 1 ) paginator = Paginator( event_list, 15 ) page_obj = paginator. get_page( page_number) page_range = paginator. get_elided_page_range( number= page_number, on_each_side= 3 , on_ends= 2 ) return render( request, "events.html" , { "page_obj" : page_obj, "page_range" : page_range} )
...
{#分页代码,业务代码请自行补充即可#}
{% if page_obj.has_other_pages %}< nav> < ul class = " pagination justify-content-center" > {% if page_obj.has_previous %}< li class = " page-item" > < a class = " page-link" href = " ?page={{ page_obj.previous_page_number }}" > 上一页</ a> </ li> {% else %}< li class = " page-item disabled" > < a class = " page-link" href = " #" > 上一页</ a> </ li> {% endif %}{% for item in page_range %}{% if item == page_obj.number %}< li class = " page-item active" > < a class = " page-link" href = " ?page={{ item }}" > {{ item }}</ a> </ li> {% elif item == '...' %}< li class = " page-item" > < a class = " page-link" href = " #" > {{ item }}</ a> </ li> {% else %}< li class = " page-item" > < a class = " page-link" href = " ?page={{ item }}" > {{ item }}</ a> </ li> {% endif %}{% endfor %}{% if page_obj.has_next %}< li class = " page-item" > < a class = " page-link" href = " ?page={{ page_obj.next_page_number }}" > 下一页</ a> </ li> {% else %}< li class = " page-item disabled" > < a class = " page-link" href = " #" > 下一页</ a> </ li> {% endif %}</ ul> </ nav>
{% endif %}
带输入框的效果部分代码
def events ( request) : event_list = Event. objects. all ( ) . order_by( "-level" , "-begin" ) page_number = request. GET. get( 'page' , 1 ) paginator = Paginator( event_list, 15 ) page_obj = paginator. get_page( page_number) num_pages = paginator. num_pages page_range = paginator. get_elided_page_range( number= page_number, on_each_side= 3 , on_ends= 2 ) return render( request, "events.html" , { "page_obj" : page_obj, "page_range" : page_range, "num_pages " : num_pages } )
{% if page_obj.has_other_pages %}< nav> < ul class = " pagination justify-content-center" > {% if page_obj.has_previous %}< li class = " page-item" > < a class = " page-link" href = " ?page={{ page_obj.previous_page_number }}" > 上一页</ a> </ li> {% else %}< li class = " page-item disabled" > < a class = " page-link" href = " #" > 上一页</ a> </ li> {% endif %}{% for item in page_range %}{% if item == page_obj.number %}< li class = " page-item active" > < a class = " page-link" href = " ?page={{ item }}" > {{ item }}</ a> </ li> {% elif item == '...' %}< li class = " page-item" > < a class = " page-link" href = " #" > {{ item }}</ a> </ li> {% else %}< li class = " page-item" > < a class = " page-link" href = " ?page={{ item }}" > {{ item }}</ a> </ li> {% endif %}{% endfor %}{% if page_obj.has_next %}< li class = " page-item" > < a class = " page-link" href = " ?page={{ page_obj.next_page_number }}" > 下一页</ a> </ li> {% else %}< li class = " page-item disabled" > < a class = " page-link" href = " #" > 下一页</ a> </ li> {% endif %}# 对input输入进行了限制[1, num_pages],防止越界输入# < li class = " page-item" > 共{{ num_pages }}页< label for = " p_num" > 到第</ label> < input type = " text" oninput = " if(value>{{ num_pages }})value={{ num_pages }};if(value<0)value=1" id = " p_num" > 页 </ li> #这里引入了一个button点击事件#< li class = " page-item" > < button class = " page-link" id = " submit" > 确定</ button> </ li> </ ul> </ nav>
{% endif %}
$ ( "#submit" ) . click ( function ( ) { let page_number = $ ( "#p_num" ) . val ( ) ; window. location. href= ` ?page= ${ page_number} ` } ) ;