Форум сайта python.su
Здравствуйте.
Помогите найти причину проблемы. С решением попробую разобраться сам.
У меня приложение на flask с самописным разделением на страницы и без ORM. Пример маршрута:
@bp.route("/search", methods=["GET", "POST"]) @login_required def search_document(): """ Search document. """ # Get current page. page = request.args.get("page", default=1, type=int) # For completion on page get all part_ids. partners_datalist = [s[0] for s in search.get_unique_partners()] # Form and choices. form = SearchDocument() form.org_id.choices = [(o[0], o[1]) for o in search.get_orgs()] if form.is_submitted(): matches = search.get_num_matches( form.search_name.data, form.start_date.data, form.end_date.data, form.storage_until.data, form.org_id.data, form.part_name.data, form.type_id.data, form.comment.data ) limit = 10 offset = (page - 1) * limit if page > 1 else 0 # Always round to upper. pages = matches // limit + (matches % limit > 0) # Get next/previous page number and link based on current # page, matches and per page limit. prev_url = (url_for("search.search_document", page=page - 1) if page > 1 else None) next_url = (url_for("search.search_document", page=page + 1, search_name=form.search_name.data, start_date=form.start_date.data, end_date=form.end_date.data, storage_until=form.storage_until.data, org_id=form.org_id.data, part_name=form.part_name.data, type_id=form.type_id.data, comment=form.comment.data) if page < pages else None) page_minus_two_url = (url_for("search.search_document", page=page - 2) if page > 3 else None) page_plus_two_url = (url_for("search.search_document", page=page + 2) if page < pages - 1 else None) first_page_url = (url_for("search.search_document", page=1) if page > 2 else None) last_page_url = (url_for("search.search_document", page=pages) if pages > 2 and page < pages - 2 else None) # Actual results. found_docs = search.search_document( form.search_name.data, form.start_date.data, form.end_date.data, form.storage_until.data, form.org_id.data, form.part_name.data, form.type_id.data, form.comment.data, form.order_field.data, form.order_direction.data, limit, offset ) return render_template("search_results.html", results=found_docs, search_name=form.search_name.data, start_date=form.start_date.data, end_date=form.end_date.data, storage_until=form.storage_until.data, org_id=form.org_id.data, part_name=form.part_name.data, type_id=form.type_id.data, comment=form.comment.data, order_field=form.order_field.data, order_direction=form.order_direction.data, prev_url=prev_url, next_url=next_url, page_plus_two_url=page_plus_two_url, page_minus_two_url=page_minus_two_url, first_page_url=first_page_url, last_page_url=last_page_url, matches=matches, page=page, pages=pages) return render_template("search.html", form=form, partners_datalist=partners_datalist)
@bp.route("/delete/<int:doc_id>", methods=["GET", "POST"])
...
return redirect(url.referrer)
@bp.route("/search", methods=["GET", "POST"])
Офлайн
vbsmЧтобы он десять раз мог удалять одно и то же уже удалённое?
возвращало пользователя на ту же страницу поиска, на которой он был до нажатия на кнопку удаления
vbsmНу вообще, взаимодействовать с пользователем надо через JavaScript. А вот то, что оно там делает на самом деле, должно быть на сервере. Поэтому пользователь взаимодействует с JavaScript-скриптами, а они уже передают информацию серверной части с указаниями, что нужно сделать, и просходит это в фоновом режиме незаметно для пользователя.
Если возможно обойтись без JS
vbsmТебе надо эти параметры, с которыми ты искал, взять и заново искать с ними. То есть в странице с кнопками удаления у тебя должны быть эти параметры известны, а значит переданы изначально. Но даже если они у тебя будут передаваться, то тебе просто некуда их подавать, потому что на API у тебя нет поискового механизма, куда можно подать параметры, чтобы оно произвело поиск и вернуло найденные по этим параметрам данные. Где вот этот механизм? Нет его.
Я подозреваю, что дело в том, что я из формы поиска при формировании результатов поиска в адресную строку не передаю параметры поиска
Отредактировано py.user.next (Апрель 27, 2024 07:20:10)
Офлайн
Да, ваша гипотеза, скорее всего, верна. Проблема заключается в том, что при возврате на предыдущую страницу (request.referrer) Flask перенаправляет на URL, который был записан в реферере браузера. PolyTrack
Офлайн