Не работает метод ООП с обработчиком Flask (думаю проблема в пагинации)

я делал сайт преимущественно в процедурном стиле. Сейчас я хотел бы переделать его с учетом парадигмы ООП. Я начал с обработчиков определённой страницы, так как у меня 8 одинаковых страниц(по структуре, но разных по тому, какие именно данные из БД на них отображаются), поэтому дабы сократить код, я решил сделать метод обработчика. Вот так выглядит один из обработчиков:

# Обработчик страницы с фейерверками
@app.route('/fireworks', methods=['GET', 'POST'])
@limiter.limit("100 per minute")
def fireworks():
    app.logger.info('Входящий запрос: %s %s', request.method, request.path)
    page = request.args.get('page', type=int, default=1)
    products = Item.query.filter_by(category=8).paginate(
        page=page,
        per_page=9,
        error_out=False)
    pagination = Pagination(
        page=page,
        total=products.total,
        per_page=9,
        bs_version=4)

    delete_form = DeleteItemsForm()

    if request.method == 'POST':
        if delete_form.validate_on_submit():
            item_id = request.form.get('product_id')
            item = Item.query.get(item_id)
            if item:
                try:
                    db.session.delete(item)
                    db.session.commit()
                    return redirect(url_for('fireworks'))
                except Exception as ex:
                    print(ex)
        else:
            print('Ошибка при удалении товара', 'error')

    return render_template('fireworks.html',
                           form=delete_form,
                           products=products.items,
                           pagination=pagination,
                           total_pages=products.pages,
                           check_total=Checking.check_admin())

Вот такой метод я из него сделал:

class BasePage:
    def __init__(self):
        pass

    def render(self):
        raise NotImplementedError


class PageHandler1(BasePage):
    def __init__(self, num_cat, name_page, name_html):
        self.num_cat = num_cat
        self.name_page = name_page
        self.name_html = name_html

    def render(self, page=1):
        app.logger.info('Входящий запрос: %s %s', request.method, request.path)
        products = Item.query.filter_by(category=self.num_cat).paginate(
            page=page,
            per_page=9,
            error_out=False)
        pagination = Pagination(
            page=page,
            total=products.total,
            per_page=9,
            bs_version=4)

        delete_form = DeleteItemsForm()

        delete_form = DeleteItemsForm()

        if request.method == 'POST':
            if delete_form.validate_on_submit():
                item_id = request.form.get('product_id')
                item = Item.query.get(item_id)
                if item:
                    try:
                        db.session.delete(item)
                        db.session.commit()
                        return redirect(url_for(self.name_page))
                    except Exception as ex:
                        print(ex)
            else:
                print('Ошибка при удалении товара', 'error')

        return render_template(self.name_html,
                               form=delete_form,
                               products=products.items,
                               pagination=pagination,
                               total_pages=products.pages,
                               check_total=Checking.check_admin())

Вот так я вызываю этот метод:

@app.route("/<name_page>")
@limiter.limit("100 per minute")
def map_endpoint(name_page: str):
    endpoints = {
        "flowers": PageHandler1(1, 'flowers', 'flowers.html'),
        "bouquets": PageHandler1(2, 'bouquets', 'bouquets.html'),
        "baskets": PageHandler1(3, 'baskets', 'baskets.html'),
        "indoor": PageHandler1(4, 'indoor', 'indoor.html'),
        "artificial": PageHandler1(5, 'artificial', 'artificial.html'),
        "wreaths": PageHandler1(6, 'wreaths', 'wreaths.html'),
        "toys": PageHandler1(7, 'toys', 'toys.html'),
        "fireworks": PageHandler1(8, 'fireworks', 'fireworks.html')}
    if name_page not in endpoints:
        print("Error 404")
    page_handler = endpoints[name_page]
    page = request.args.get('page', type=int, default=1)
    return page_handler.render(page=page)

Проблема заключается вот в чём: когда я запускаю простой обработчик в виде функции, всё работает так, как и задумывалось, но когда я вызываю его как метод класса(описанного выше), то сама пустая страница(имеется в виду страница без карточек товара) отображается, но если добавить в базу данных айтемы(товары), то при появлении карточек товара на этой странице, сайт слетает и выдаёт следующую ошибку: werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'fireworks' with values ['page']. Did you mean 'flowers' instead?. Как я понимаю дело именно в пагинации, но никак не пойму что именно не так, пробовал передавать page прямо в методе, результат тот же, помогите пожалуйста))


Ответы (0 шт):