Flask table и LinkCol, ButtonCol - возможна ли передача значения в качестве параметра URL вместо пути к конечной точке? - PullRequest
0 голосов
/ 17 марта 2020

У меня есть функция, определенная следующим образом:

@app.route('/products', methods=['GET'])
@app.route('/products/<id>', methods=['GET', 'PUT'])
def foo():

  id = request.args.get('id', type=int)
  if id != None and request.method in ['GET', 'PUT']:
    # route to editing product template
  else:
    # display products as table

Я определил таблицу Flask следующим образом:

class ProductsTable(Table):
  id=Col('ID', show=False)
  price=Col('Price')
  available_online=Col('Available online?')
  available_num=Col('In stock')
  edit=ButtonCol('Edit', url_kwargs=dict(id='id'), endpoint='/products')

Я запрашиваю базу данных SQLite и заполняю таблицу. Отображение работает нормально, но я борюсь с функциональностью редактирования.

Сейчас, как это работает, когда пользователь нажимает кнопку «Изменить», URL-адрес меняется на http://localhost:5000/products/1, http://localhost:5000/products/2 и c. в зависимости от идентификатора элемента в БД и соответственно в таблице (поскольку он просто отображает данные БД).

Однако я хотел бы выяснить, можно ли передать идентификатор в качестве параметра URL, чтобы что URL для редактирования определенного продукта c нажатием кнопки Изменить становится http://localhost:5000/products?id=1 http://localhost:5000/products?id=2 et c.

Я попытался передать '/products/<id>' аргументу endpoint, но я получил следующая ошибка

werkzeug.routing.BuildError: Не удалось создать URL для конечной точки '/products/<id>' со значениями ['id']. Вы имели в виду 'products' вместо этого?

Я также пробовал '/products?<id>', '/products?id=<id>', а также без / перед products, но результат был таким же. Единственная действительная конечная точка здесь - это просто products.

Возможно ли это, и если да, как я могу добиться такого поведения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...