django-xadmin定制之分页显示数量
环境:xadmin-for-python3 python3.5.2 django1.9.12
主要思路:利用django-xadmin的插件原理和原有分页插件的逻辑,单独定义一个分页显示数插件,效果如下“每页”:

以下为相关代码:
1. 新建一个plugins/listperpage.py
from django.utils.safestring import mark_safe import xadmin
from xadmin.views import BaseAdminPlugin
from django.template import loader
from django.utils.html import escape class ListPerPagePlugin(BaseAdminPlugin):
show_list_per_page = True
list_per_page_choices = [20, 50, 100, 500] def init_request(self, *args, **kwargs):
try:
self.admin_view.list_per_page = int(self.request.GET.get('list_per_page', self.admin_view.list_per_page))
except ValueError as e:
print(repr(e)) if self.admin_view.list_per_page>10000:
self.admin_view.list_per_page = 10000 # 最大10000 return bool(self.show_list_per_page) def get_context(self, context):
list_per_page_range = []
for per_page in self.list_per_page_choices:
list_per_page_range.append(mark_safe('<a href="%s"%s><p class="text-left">%d</p></a> ' % (escape(self.get_query_string({'list_per_page': per_page})),
(per_page == self.admin_view.list_per_page and ' class="btn btn-sm disabled"' or ' class="btn btn-sm"'), per_page))) context.update({'list_per_page_range': list_per_page_range, 'list_per_page_required': (not self.admin_view.show_all or not self.admin_view.can_show_all) and self.admin_view.multi_page})
return context # 对应model_list.html中的view_block 'bx_list_per_page'
def block_bx_list_per_page(self, context, nodes):
nodes.append(loader.render_to_string('base/blocks/bx_list_per_page.html', context_instance=context))
新建bx_list_per_page.html文件:
{% if list_per_page_required %}
<div class="dropdown" style="display:inline-block;">
<button class="btn btn-default btn-sm dropdown-toggle" style="line-height:1.42" type="button" data-toggle="dropdown">每页
<span class="caret"></span></button>
<ul class="dropdown-menu">
{% for num in list_per_page_range %}
<li>{{ num }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
2. 在合适的adminx.py中注册这个plugin, 注意这个adminx.py文件所在的app package必须是有配置在INSTALLED_APPS中:
from xadmin.views import ListAdminView
from .plugins.listperpage import ListPerPagePlugin
xadmin.site.register_plugin(ListPerPagePlugin, ListAdminView)
3. 更改djano-xadmin中的model_list.html文件,分页部分增加了
view_block 'bx_list_per_page' :
<ul class="pagination pagination-sm pagination-left pagination-inline">
{% view_block 'pagination' 'small' %}<li>{% view_block 'bx_list_per_page' %}</li>
</ul>
django-xadmin定制之分页显示数量的更多相关文章
- 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页
第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值, ...
- 第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页
第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页 分页可以用一个第三方分页模块django-pure-pagination 下载地址:https://github.c ...
- Django - Xadmin (三) 分页、搜索和批量操作
Django - Xadmin (三) 分页.搜索和批量操作 分页和 ShowList 类 因为 list_view 视图函数里面代码太多,太乱,所以将其里面的用于处理表头.处理表单数据的关键代码提取 ...
- 第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示
第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件, ...
- Django中html里的分页显示
分页一(very low) 因为数据量过大,而又想直观便捷的查看数据,进而通过分页显示就可以完成这项工作 app中views.py LIST=[] #全局定义一个LIST for i in range ...
- Orchard运用 - 定制博客分页显示
一般,对于条目过多的系统或博客,分页显示是最简单的方式.目前分页方式基本有三种格式: 1.显示所有信息,包括标明当前页面,提供上一页和下一页链接和使用首页和末页链接. 2.只标注上一页和下一页链接. ...
- Django之分页显示文章
1.项目:http://www.cnblogs.com/jasonhaven/p/7493422.html 2.任务描述:页面分页显示文章 3.源代码 后台: from django.core.pag ...
- Django项目:CRM(客户关系管理系统)--19--11PerfectCRM实现King_admin分页显示条数
登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html list_per_page = 2 #分页条数 list_per_page = 2 #分页条数 ...
- python django 之 django自定制分页
自定制的分页模块 #!/usr/bin/env python3 # V1.1 解决问题: # 1). p 参数 为 负数 与 p 参数查过总页数时报错的问题 # V1.2 解决的问题: # 1). 点 ...
随机推荐
- 路飞学城Python-Day4(practise)
#1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex','eric','rain']# li = ['alex','eric','rain']# print('_'.j ...
- C指针思考-(1)
首先记录下时间吧,@2016-08-18 23:26:22,这段时间看了同事的3本经典的书,<c缺陷和陷阱>,<c和指针>和<c专家编程>,感觉指针说的最多,多多少 ...
- docker系列之一 image和container
docker images往往不知不觉就占满了硬盘空间,为了清理冗余的image,可采用以下方法: 1.进入root权限 sudo su 2.停止所有的container,这样才能够删除其中的imag ...
- 超简单入门Vuex小示例
写在前面 本文旨在通过一个简单的例子,练习vuex的几个常用方法,使初学者以最快的速度跑起来一个vue + vuex的示例. 学习vuex需要你知道vue的一些基础知识和用法.相信点开本文的同学都具备 ...
- Docker之Mysql安装及配置
原文:Docker之Mysql安装及配置 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhaobw831/article/details/8014 ...
- 009实现一个算法来删除单链表中的一个结点,仅仅给出指向那个结点的指针(keep it up)
呵呵,这个题不能直接删除已知的结点.由于是单链表,不知道前驱,仅仅知道 后继结点,直接删除会使链表断开.只是我们能够删除已知结点的后继结点, 把后继结点的值赋值给已知结点. #include < ...
- HDU 1039.Easier Done Than Said?【字符串处理】【8月24】
Easier Done Than Said? Problem Description Password security is a tricky thing. Users prefer simple ...
- m_Orchestrate learning system---二十四、thinkphp里面的ajax如何使用
m_Orchestrate learning system---二十四.thinkphp里面的ajax如何使用 一.总结 一句话总结:其实ajax非常简单:前台要做的事情就是发送ajax请求过来,后台 ...
- Python 从入门到精通 全程最佳实现梳理
零零星星的时间,持续完善中...... 1.一些基础的必要信息归纳 Python 官网 www.python.org 发明者 吉多·范罗苏姆 发行时间 1991年,26年前 编程泛型 多泛型.面向对 ...
- GridView 绑定 ObjectDataSource
创建GridView <asp:GridView ID="GridView1" runat="server" DataSourceID="Obj ...