Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python Flask分页错误:分页页面返回404 错误源代码:_Python 3.x_Flask_Pagination - Fatal编程技术网

Python 3.x Python Flask分页错误:分页页面返回404 错误源代码:

Python 3.x Python Flask分页错误:分页页面返回404 错误源代码:,python-3.x,flask,pagination,Python 3.x,Flask,Pagination,预期行为 在索引处有一个带有电子邮件和ip的表单,用于搜索和显示响应,响应应分页 main/routes.py from flask import render_template, flash, redirect, url_for, request, g, current_app, session from app.main import bp from app.main.forms import SearchForm @bp.before_app_request def before_req


预期行为 在索引处有一个带有电子邮件和ip的表单,用于搜索和显示响应,响应应分页

main/routes.py

from flask import render_template, flash, redirect, url_for, request, g, current_app, session
from app.main import bp
from app.main.forms import SearchForm

@bp.before_app_request
def before_request():
    if current_user.is_authenticated:
        current_user.last_seen = datetime.utcnow()
        db.session.commit()

    try:
        session['email'] = session['email'] if session['email'] else 'example@example.com'
    except KeyError as ke:
        session['email'] = 'example@example.com'


@bp.route('/', methods=['GET', 'POST'])
@bp.route('/index', methods=['GET', 'POST'])
def index():
    form = SearchForm()
    page = request.args.get('page', 1, type=int)
    if form.validate_on_submit():
        words_email = ["%" + form.email.data + "%"]
        rule_email = and_(*[LogImported.sender_address.like(w) for w in words_email])
        # pay attention these two lines below:
        l = LogImported.query.filter(rule_email)
        pagination = l.paginate(page, per_page=50, error_out=True)
        pageitems = pagination.items
        session['email'] = form.email.data
        return render_template('index.html', title=_('Home'), form=form, loglist = l, \
        pageitems = pageitems, pagination = pagination)
    elif session['email'] is not 'example@example.com':
        words_email = ["%" + form.email.data + "%"]
        rule_email = and_(*[LogImported.sender_address.like(w) for w in words_email])
        # pay attention these two lines below:
        l = LogImported.query.filter(rule_email)
        pagination = l.paginate(page, per_page=50, error_out=True)
        pageitems = pagination.items
        session['email'] = form.email.data
        return render_template('index.html', title=_('Home'), form=form, loglist = l, \
        pageitems = pageitems, pagination = pagination)
    else:
        return render_template('index.html', title=_('Home'), form=form)
main/forms.py

class SearchForm(FlaskForm):
    email = StringField(_l('Email'))
    ip = StringField('IP', validators=[Length(min=0, max=140)])
    submit = SubmitField(_l('Submit'))
from flask import Blueprint

bp = Blueprint('main', __name__)

from app.main import routes
class LogImported(db.Model):
    id = db.Column(db.Integer, index=True, primary_key=True)
    date = db.Column(db.DateTime, default=datetime.utcnow)
    sender_address = db.Column(db.String(255), index=True)
    recipient_address = db.Column(db.String(255))
    recipient_count = db.Column(db.Integer)
    return_path = db.Column(db.String(255))
    client_hostname = db.Column(db.String(255))
    client_ip = db.Column(db.String(100))
    server_hostname = db.Column(db.String(255))
    server_ip = db.Column(db.String(100))
    original_client_ip = db.Column(db.String(100))
    original_server_ip = db.Column(db.String(100))
    event_id = db.Column(db.String(50))
    total_bytes = db.Column(db.Integer)
    connector_id = db.Column(db.String(50))
    message_subject = db.Column(db.String(255))
main/\uuuuu init\uuuuu.py

class SearchForm(FlaskForm):
    email = StringField(_l('Email'))
    ip = StringField('IP', validators=[Length(min=0, max=140)])
    submit = SubmitField(_l('Submit'))
from flask import Blueprint

bp = Blueprint('main', __name__)

from app.main import routes
class LogImported(db.Model):
    id = db.Column(db.Integer, index=True, primary_key=True)
    date = db.Column(db.DateTime, default=datetime.utcnow)
    sender_address = db.Column(db.String(255), index=True)
    recipient_address = db.Column(db.String(255))
    recipient_count = db.Column(db.Integer)
    return_path = db.Column(db.String(255))
    client_hostname = db.Column(db.String(255))
    client_ip = db.Column(db.String(100))
    server_hostname = db.Column(db.String(255))
    server_ip = db.Column(db.String(100))
    original_client_ip = db.Column(db.String(100))
    original_server_ip = db.Column(db.String(100))
    event_id = db.Column(db.String(50))
    total_bytes = db.Column(db.Integer)
    connector_id = db.Column(db.String(50))
    message_subject = db.Column(db.String(255))
/models.py

class SearchForm(FlaskForm):
    email = StringField(_l('Email'))
    ip = StringField('IP', validators=[Length(min=0, max=140)])
    submit = SubmitField(_l('Submit'))
from flask import Blueprint

bp = Blueprint('main', __name__)

from app.main import routes
class LogImported(db.Model):
    id = db.Column(db.Integer, index=True, primary_key=True)
    date = db.Column(db.DateTime, default=datetime.utcnow)
    sender_address = db.Column(db.String(255), index=True)
    recipient_address = db.Column(db.String(255))
    recipient_count = db.Column(db.Integer)
    return_path = db.Column(db.String(255))
    client_hostname = db.Column(db.String(255))
    client_ip = db.Column(db.String(100))
    server_hostname = db.Column(db.String(255))
    server_ip = db.Column(db.String(100))
    original_client_ip = db.Column(db.String(100))
    original_server_ip = db.Column(db.String(100))
    event_id = db.Column(db.String(50))
    total_bytes = db.Column(db.Integer)
    connector_id = db.Column(db.String(50))
    message_subject = db.Column(db.String(255))
模板/index.html

{% extends "base.html" %}
{% from 'bootstrap/form.html' import render_form %}
{% from 'bootstrap/pagination.html' import render_pagination %}


...

{{ render_pagination(pagination) }}

...
实际行为 简而言之,从索引的表单获取结果,然后对其进行分页,但任何分页链接都无法正常工作

我将会话的电子邮件和ip设置为
session['email']
session['ip']
。 然后,我单击第2页,按会话将这些关键字搜索到一个对象并分页,但
paginate()
无法正常工作,链接类似
http://127.0.0.1:5000/index?page=2
,响应错误页面:404

elif
在routes.py中:

l = LogImported.query.filter(rule)
pagination = l.paginate(page, per_page=50, error_out=True)
l=logiimported.query.filter(rule)
的返回类型正确,但
l.paginate(page,per\u page=50,error\u out=True)
抛出错误。 被if阻止的代码工作正常,被elif阻止的代码响应错误

参数
规则
在这两个位置相同。为什么会出现这些错误

127.0.0.1 - - [11/Dec/2018 12:44:51] "GET /index?page=2 HTTP/1.1" 404 -
环境
  • Python版本:3.7.1
  • 烧瓶版本:1.0.2
  • Werkzeug版本:0.14.1

当您请求的页码高于过滤结果中存在的页数时,会发生此错误。在本例中,您请求的是第2页,带有“l.paginate(page,per_page=50,error_out=True)”(page=2),而实际上结果的数量小于或等于50,因此您只能得到一页

这是一个常见错误,ui请求的页码高于现有的页码。每次搜索时,您都必须将页面重置为1

看下图,行为是相同的(但我得到了标志error_out=False,因此分页返回结果,其中项目为空,即使搜索得到6个项目)


嘿,你,这里的伟人,对我很有用,非常感谢你!