class Page:
def __init__(self,cur_page,total_records,perPageOfDataNum=50,perPageOfPageNum=10):
:param cur_page: 鼠标点击的当前页
:param total_records: 从数据库提取的总的记录
:param perPageOfDataNum: 每一页上展示的数据量
:param perPageOfPageNum: 当前屏幕显示的页码数量
self.cur_page = cur_page
self.total_records = total_records
self.perPageOfDataNum = perPageOfDataNum
self.perPageOfPageNum = perPageOfPageNum
# 当前页显示的数据
def showList(self):
self.dataList = [x for x in range(self.total_records)]
start_index = (self.cur_page - 1) * self.perPageOfDataNum
end_index = self.cur_page * self.perPageOfDataNum
showList = self.dataList[start_index:end_index]
return showList
# 所有数据一共要多少页
@property
def total_page(self):
i,r = divmod(len(self.dataList),self.perPageOfDataNum)
self.total_page1 = i+1 if r else i # 如果余数!=0,则页码数为i + 1,否则正好为i页
return self.total_page1
# 当前屏幕显示的页码
def show_page(self):
# 确认数据库构建的页码数量要大于你设置的初始值perPageOfPageNum,否则会有很多空白页码
self.perPageOfPageNum = self.total_page if self.total_page < self.perPageOfPageNum else self.perPageOfPageNum
side = self.perPageOfPageNum // 2
# 考虑页码在最左边的情况
if self.cur_page <= side:
startPage = 1
endPage = self.perPageOfPageNum + 1
# 考虑页码在最右边的情况
elif (self.total_page - self.cur_page) < side:
startPage = self.total_page - self.perPageOfPageNum + 1
endPage = self.total_page + 1
# 页码在中间的情况
else :
startPage = self.cur_page - side
endPage = self.cur_page + side + 1
pageList = []
for i in range(startPage,endPage):
if i == self.cur_page: # 点击的时候增加样式
pageList.append('
%s' % (i, i))
else:
pageList.append('
%s' % (i, i))
page = "".join(pageList)
page = mark_safe(page)
return page
page.html
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>Title</title>
<style>
.pagination{
padding-top:20px;
.pagination .p{
display:inline-block;
padding:0 5px;
background-color:grey;
margin:0 5px;
.pagination .p:hover{
background-color: pink;
.pagination .p.active{
background-color: pink;
</style>
</head>
{% for item in showList %}
<li><a>{{ item }}</a></li>
{% endfor %}
<div class="pagination">
{{ page }}
{{ page_turn }}
<select id="ii" οnchange="change(this)" >
<option value="3" >3</option>
<option value="5">5</option>
<option value="7">7</option>
</select>
<script src="/static/jquery-1.12.4.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script>
$(function () {
{# 每次触发onchange事件,会location.reload,刷新页面,这时select会回复到初始状态值,设置DOM加载完成后初始化该功能呢个并设置为上次cookie值#}
var v = $.cookie('perPageOfDataNum');
$("#ii").val(v);
console.log('v',v);
function change(ths) {
var val = $(ths).val();
console.log('val',val);
{# onchange事件,当值发生改变触发该事件。鼠标一点击select框,获取到select的值,并设置为cookie #}
$.cookie('perPageOfDataNum',val);
location.reload();
</script>
</body>
</html>
view.py
from django.utils.safestring import mark_safe
from utils import pagination
def page(request):
# 分页展示
cur_page = request.GET.get('p',1)
cur_page = int(cur_page)
pageNum = request.COOKIES.get('perPageOfDataNum',10)
p = pagination.Page(cur_page,30,int(pageNum))
showList = p.showList()
page = p.show_page()
totalPage = p.total_page
#页面跳转功能
page_turn = """
<input id="i1" type="text"/>
<a id='a' οnclick="jump(this,'/page/?p=',%d)">Go</a>
<script src="/static/jquery-1.12.4.js"></script>
<script>
function jump(ths,base,total){ # base=/page/?p total=totalPage+1
var val = $('#i1').val();
if(val>0&&val<total){
location.href = base + val;
else{
alert('input must be > 0 and < ' + total);
</script>
""" % (totalPage+1,)
page_turn = mark_safe(page_turn)
return render(request, 'page.html', {'showList': showList, 'page': page,"page_turn":page_turn})
from django.shortcuts import render_to_response
from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
class OrgView(View):
def get(self,request):
page = request.GET.get('page', 1)
except PageNotAnInteger:
page = 1
#Orgs = CourseOrg.objects.all()
Orgs = [x for x in range(100)]
p = Paginator(Orgs,4, request=request) # 4 代表每页显示多少数据
orgs = p.page(page ) # 返回Page对象,可以看这个对象里有几个元素,此时表示第page页有4条记录。可以看这个对象有没有前页,
return render(request,'org-list.html',{"orgs":orgs})
{% for obj in orgs.object_list %}
<h1>{{ obj }}</h1>
{% endfor %}
这样页面就能显示为4条数据。
下一步,添加分页导航页
{{ orgs.pages }} : [1, 2, None, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, None, 24, 25] 。这样显示是settings中的配置。PAGINATION_SETTINGS
{{ orgs.number }} :返回用户点击的页码
添加bootstrap样式
<ul class="pagination">
{% if orgs.has_previous %}
<li><a href="?{{ orgs.previous_page_number.querystring }}">«</a></li>
{% else %}
<li><a> «</a></li>
{% endif %}
{% for page in orgs.pages %}
{% if page %}
{% ifequal page orgs.number %}
<li class="active"><a>{{ page }}</a></li>
{% else %}
<li ><a href="?{{ page.querystring }}">{{ page }}</a></li>
{% endifequal %}
{% else %}
<li ><a>...</a></li>
{% endif %}
{% endfor %}
{% if orgs.has_next %}
<li><a href="?{{ orgs.next_page_number.querystring }}"> »</a></li>
{% else %}
<li><a> »</a></li>
{% endif %}
pagination.pyfrom django.utils.safestring import mark_safeclass Page: def __init__(self,cur_page,total_records,perPageOfDataNum=50,perPageOfPageNum=10): """ :param cur_page: 鼠标点...
django从view向template传递HTML字符串的时候,django默认不渲染此HTML,原因是为了防止这段字符串里面有恶意攻击的代码。
如果需要渲染这段字符串,需要在view里这样写:
from django.utils.safestring import mark_safe
def view(request):
pageHtml = mark_saf...
做小组内
使用的
一个简单工具,其中要实现的
一个小功能是当某个下拉菜单的选择值改变时触发另一表单元素的属性变化。自然的想到
使用select表单元素的
onchange事件。
下拉菜单部分的代码如下:
1-分区表
2-普通表
下拉菜单的值通过JS更改:
tableType = getTableType(DNS, port, DBName, tableName);
onchange()是js方法
注意:在标签元素上使用 <input onchange=""></input> ,此处不能使用change方法
change()是jquery方法
django是用python编写的一款web框架,包含了很多丰富的功能,其中一项就是后台资源的管理,但是默认情况下都是英文界面,很不友好,所以我们需要使用django的定制后台来定制我们的中文后台。
首先是我们的整个后台系统的界面语言:
修改之前:
接下来我们需要修改主界面语言,找到自己根项目的settings....
首先,需要在项目中安装django-crontab库,在项目的settings.py文件中配置INSTALLED_APPS并添加'django_crontab'
然后,在项目的根目录下新建一个cron.py文件,在文件中编写定时任务代码
接着,在项目根目录下执行python manage.py crontab add 命令,将cron.py文件中的定时任务添加到crontab中
最后,在项目根目录下执行python manage.py crontab show 命令,查看已添加的定时任务
1.在项目的settings.py文件中配置INSTALLED_APPS并添加'django_crontab'
INSTALLED_APPS = [
'django_crontab',
2.在项目根目录下新建一个cron.py文件,在文件中编写定时任务代码
from django_crontab.app_settings import CRONJOBS
@CRONJOBS.register()
def my_cron_job():
print('This is a cron job')
3.在项目根目录下执行python manage.py crontab add 命令,将cron.py文件中的定时任务添加到crontab中
4.在项目根目录下执行python manage.py crontab show 命令,查看已添加的定时任务
- 具体的时间表达式可以参考crontab的语法
- django-crontab默认是后台运行的,如果想在前台运行需要手动设置