我已经做了以下来解决这个问题:
在我的python代码中..
1. 我正在使用 Pagination.items 提取页面的项目。
2. 我正在使用 Pagination.iter_pages(..) 提取页码列表
并将两者都作为 json 响应发送。
@app.route('/filter', defaults={'page_num':1}, methods=['get'])
@app.route('/filter/<int:page_num>', methods=['get'])
def filter(page_num):
if request.method=='GET':
filter_criteria = request.args.get("query")
if filter_criteria != "":
like_filter_criteria = "%" + filter_criteria + "%"
search_results = db.session.query(Data).filter(or_(Data.mobile1.like(like_filter_criteria),
Data.mobile2.like(like_filter_criteria),
Data.mobile3.like(like_filter_criteria))).filter(and_(Data.active_status == "Y")).order_by(Data.name)
else:
search_results = fetch_all_details()
if search_results != None:
paginationObj = search_results.paginate(per_page=3,page=page_num,error_out=True)
num_list = []
for i in paginationObj.iter_pages(left_edge = 3, right_edge = 3, left_current = 3, right_current = 3):
num_list.append(i)
return jsonify({'json_list' : [i.serialize for i in paginationObj.items],
'pages_lst' : num_list})
在我的 JavaScript..
1.我正在正常访问要在每个页面上显示的项目的值
function get_cust_data(pageNum){
var formData = {'query': $('input[name=query]').val()}
$.ajax({
url: '/filter' + pageNum,
data: formData,
type: 'GET',
success: function(response) {
console.log(response);
show_data_in_table(response);
},
error: function(error) {
console.log(error);
}
});
}
function show_data_in_table(response){
var new_tbody = document.createElement('tbody');
new_tbody.setAttribute("id","tbody");
var data = response['json_list'];
var page_numbers = response['pages_lst'];
var cust_data = '';
$.each(data, function(key, value){
cust_data += '<tr>';
cust_data += '<td>' + value.name + '</td>';
cust_data += '<td>' + value.mobile1 + '</td>';
cust_data += '<td>' + value.mobile2 + '</td>';
cust_data += '<td>' + value.mobile3 + '</td>';
cust_data += '<td>' + value.address + '</td>';
cust_data += '<td>' + '<a href='+ Flask.url_for('index',{'id':value.id, 'action':'edit'}) +'>Edit</a></td>';
cust_data += '<td>' +
'<form id="frm_delete" action="'+ Flask.url_for('delete_cust') +'" method="post" role="form">' +
'<input type="hidden" name="id_to_delete" id="id_to_delete" value="'+ value.id + '">' +
'<a href="#" id="btn_delete">Delete</a>' +
'</form>' + '</td>';
cust_data += '</tr>';
});
new_tbody.innerHTML = cust_data;
var old_tbody = document.getElementById('tbody');
old_tbody.parentNode.replaceChild(new_tbody, old_tbody);
show_page_numbers(page_numbers);
}
- 并以同样的方式访问页码列表。
function show_page_numbers(page_numbers){
var new_links_box = document.createElement('div');
new_links_box.setAttribute("id","paginationBox");
var anchorTags = '';
for (var i = 0; i < page_numbers.length; i++){
var item = page_numbers[i] === null ? ellipsis : page_numbers[i] ;
anchorTags += '<a href='+ Flask.url_for('filter') + ' id="page_num_link">'+ item +'</a> ';
}
new_links_box.innerHTML = anchorTags;
var old_links_box = document.getElementById('paginationBox');
old_links_box.parentNode.replaceChild(new_links_box,old_links_box);
}
然后我使用一些好的旧 js 来访问用户单击的页码并将其发送以与我的 ajax 调用一起使用,该调用也会在页面加载时被调用。
$("#datalist").on("click","#paginationBox #page_num_link", function(e){
e.preventDefault();
var page = '/' + $(e.target).html();
if(page != ellipsis){
get_cust_data(page);
}
});
这就是我的模板的样子。它基本上什么都没有,因为一切都是动态的。
<table id="body_tbl">
<thead>
<tr>
<th>Name</th>
<th>mobile 1</th>
<th>mobile 2</th>
<th>mobile 3</th>
<th>Address</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</thead>
<tbody id="tbody">
</tbody>
</table>
<div id="paginationBox">
</div>
这样,当分页功能按预期工作时,链接点击事件不会加载页面。
希望这会有所帮助。