Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Flask 属性错误:';HTMLString';对象没有属性';分页';_Flask_Pagination_Flask Sqlalchemy_Flask Wtforms - Fatal编程技术网

Flask 属性错误:';HTMLString';对象没有属性';分页';

Flask 属性错误:';HTMLString';对象没有属性';分页';,flask,pagination,flask-sqlalchemy,flask-wtforms,Flask,Pagination,Flask Sqlalchemy,Flask Wtforms,有人帮我写了一些很棒的代码,在这里用一个提交按钮多次显示同一个表单,效果不错,但由于我将有数百个表单需要分页,我过去可以分页页面,但我不知道如何将这些代码与for循环中的表单一起使用。 这是我的代码:(在Greg的帮助下) 我试图使用“表单”是一个列表的事实来对结果进行分页,我显然不知道该怎么做,我已经看过了,但我也不明白! 非常需要所有的帮助 保罗,向你问好 编辑 我已尝试使用flask_分页,以下是我的代码: @bp.route('/stock/stock/', methods=['GET'

有人帮我写了一些很棒的代码,在这里用一个提交按钮多次显示同一个表单,效果不错,但由于我将有数百个表单需要分页,我过去可以分页页面,但我不知道如何将这些代码与for循环中的表单一起使用。 这是我的代码:(在Greg的帮助下)

我试图使用“表单”是一个列表的事实来对结果进行分页,我显然不知道该怎么做,我已经看过了,但我也不明白! 非常需要所有的帮助 保罗,向你问好

编辑 我已尝试使用flask_分页,以下是我的代码:

@bp.route('/stock/stock/', methods=['GET', 'POST'])
@login_required
def stock():
    search = False
    q = request.args.get('q')
    if q:
        search = True
    page = request.args.get(get_page_parameter(), type=int, default=1)
    stocks = Stock.query.all()
    forms = []
  #rest of code here#
        pagination = Pagination(page=page, total=stocks.count(), search=search, record_name='forms')
        form.process()  # Do this after validate_on_submit or breaks CSRF token
   return render_template('stock/stock.html',forms=forms, title=Stock, pagination=pagination)

这给出了一个不同的错误“TypeError:count()只接受一个参数(0给定)”我也尝试了“total=forms.count()”并得到了相同的错误

我讨厌这样做,因为一开始它显示出缺乏耐心,但这个答案可能会帮助其他人,我用两种方法解决了我的问题第一种是决定显示顺序的查询(降序或升序),然后允许我使用flask paginate在几页上显示结果,我意识到我在处理一个列表,其中一个开发者的例子告诉我,这是我的代码

from flask_paginate import Pagination, get_page_args


@bp.route('/stock', methods=['GET', 'POST'])
@bp.route('/stock/stock/', methods=['GET', 'POST'])
@login_required
def stock():
    stocks = Stock.query.order_by(Stock.id.desc())# this gives order of results
    forms = []
    def get_forms(offset=0, per_page=25): #this function sets up the number of
        return forms[offset: offset + per_page]  #results per page
for stock in stocks:
    form = AddStockForm()
    form.id.default = stock.id
    form.image.default = stock.image_url
    form.date.default = stock.date
    form.description.default = stock.description
    form.event.default = stock.event
    form.achat.default = stock.achat
    form.vente.default = stock.vente
    form.sold.default = stock.sold
    forms.append(form)
for form in forms:
    if form.validate_on_submit():
        if form.modify.data:
            stock = Stock.query.filter_by(id=form.id.data).one()
            stock.date = form.date.data
            stock.description = form.description.data
            stock.event = form.event.data
            stock.achat = form.achat.data
            stock.vente = form.vente.data
            stock.sold = form.sold.data
            db.session.add(stock)
            db.session.commit()
        elif form.delete.data:
            stock = Stock.query.filter_by(id=form.id.data).one()
            db.session.delete(stock)
            db.session.commit()
        return redirect(url_for('stock.stock'))

    #this is the code from the link that I used to paginate
    page, per_page, offset = get_page_args(page_parameter='page',
                                           per_page_parameter='per_page')
    total = len(forms) # this code counts the resulting list to be displayed
    pagination_forms = get_forms(offset=offset, per_page=per_page)
    pagination = Pagination(page=page, per_page=per_page, total=total)
    form.process()  # Do this after validate_on_submit or breaks CSRF token

return render_template('stock/stock.html', title=Stock, stocks=stocks
                       page=page, forms=pagination_forms, per_page=per_page, pagination=pagination)
#And finally this is the pagination passed to the html
所以,这是给所有像我这样与一切抗争但仍然热爱一切的人的

from flask_paginate import Pagination, get_page_args


@bp.route('/stock', methods=['GET', 'POST'])
@bp.route('/stock/stock/', methods=['GET', 'POST'])
@login_required
def stock():
    stocks = Stock.query.order_by(Stock.id.desc())# this gives order of results
    forms = []
    def get_forms(offset=0, per_page=25): #this function sets up the number of
        return forms[offset: offset + per_page]  #results per page
for stock in stocks:
    form = AddStockForm()
    form.id.default = stock.id
    form.image.default = stock.image_url
    form.date.default = stock.date
    form.description.default = stock.description
    form.event.default = stock.event
    form.achat.default = stock.achat
    form.vente.default = stock.vente
    form.sold.default = stock.sold
    forms.append(form)
for form in forms:
    if form.validate_on_submit():
        if form.modify.data:
            stock = Stock.query.filter_by(id=form.id.data).one()
            stock.date = form.date.data
            stock.description = form.description.data
            stock.event = form.event.data
            stock.achat = form.achat.data
            stock.vente = form.vente.data
            stock.sold = form.sold.data
            db.session.add(stock)
            db.session.commit()
        elif form.delete.data:
            stock = Stock.query.filter_by(id=form.id.data).one()
            db.session.delete(stock)
            db.session.commit()
        return redirect(url_for('stock.stock'))

    #this is the code from the link that I used to paginate
    page, per_page, offset = get_page_args(page_parameter='page',
                                           per_page_parameter='per_page')
    total = len(forms) # this code counts the resulting list to be displayed
    pagination_forms = get_forms(offset=offset, per_page=per_page)
    pagination = Pagination(page=page, per_page=per_page, total=total)
    form.process()  # Do this after validate_on_submit or breaks CSRF token

return render_template('stock/stock.html', title=Stock, stocks=stocks
                       page=page, forms=pagination_forms, per_page=per_page, pagination=pagination)
#And finally this is the pagination passed to the html