我很长一段时间都无法处理它。
当我在地址 -
http://127.0.0.1:5000/search?key=mySearch 中尝试第二个搜索 (mySecondSearch) 时,它会返回上一个搜索 (mySearch)
(但查询有效 - 我获取带有键 mySecondSearch 的列表的模板)
如何获取带有与我的请求相关的键的地址
header.html
<form method="POST" action="{{ url_for('views.search', key=slugy) }}" role="search" class="hiddenSearch">
{{ search_form.hidden_tag() }}
<input class="form-control" type="search"
placeholder=""
aria-label="Search"
name="searched"
minlength="3"
maxlength="44"
oninvalid="this.setCustomValidity('')"
oninput="this.setCustomValidity('')"
title=""/>
</form>
view.py
@views.route('/search/', methods=["POST"])
def search():
page_title = ""
clean = re.compile('<.*?>')
search_form = SearchForm()
posts = Poems.query
if request.method == "POST" and search_form.validate_on_submit():
# Get Data from submitted form
searched = search_form.searched.data
poem_list.searched = searched
slugy = slugify(searched)
# Query
page = request.args.get('page', 1, type=int)
posts = posts.filter(Poems.con_keyword.ilike('%' + searched + '%'))
posts = posts.order_by(Poems.title).paginate(per_page=7, page=page, error_out=True)
return render_template("content/search.html",
search_form=search_form,
searched=searched,
page_title=page_title,
posts=posts,
clean=clean, re=re, slugy=slugy)
else:
flash("!")
return render_template("content/search.html",
search_form=search_form,
page_title=page_title,
posts=posts, clean=clean, re=re)
search.html| ||我尝试删除缓存,或不保存任何数据,-什么都没有
<section id="search">
<div class="content">
{% if searched %}
<h1> you ask -
<span class="src-ed">{{ searched[0:12] }}...</span><br/>we found:
</h1>
...etc
测试-一切都完美地返回一些东西
人工智能-没有什么可以帮助我(我尝试了它的代码-与我的一样工作)
AI - nothing that can help me (I tried its code - works as mine)
问题在于的表单操作 URL。在其中硬编码了
key=slugy
,
slugy
是在
上一次搜索
期间设置的。这就是为什么始终会看到上一次搜索结果的原因。
为了解决这个问题,需要从表单操作 URL 中删除
key=slugy
部分。Flask 会自动将搜索词作为查询参数传递给的视图函数。
以下是更新后的代码:
header.html:
<form method="POST" action="{{ url_for('views.search') }}" role="search" class="hiddenSearch">
{{ search_form.hidden_tag() }}
<input class="form-control" type="search"
placeholder=""
aria-label="Search"
name="searched"
minlength="3"
maxlength="44"
oninvalid="this.setCustomValidity('')"
oninput="this.setCustomValidity('')"
title=""/>
</form>
不需要在
url_for()
函数中传递
key
参数。Flask 会自动将表单数据作为请求的一部分发送。
views.py:
@views.route('/search/', methods=["POST"])
def search():
# ... 其他代码 ...
if request.method == "POST" and search_form.validate_on_submit():
# ... 其他代码 ...
# 不再需要手动设置 slugy,因为它将作为查询参数传递
# slugy = slugify(searched)
# ... 其他代码 ...
else:
# ... 其他代码 ...
通过这些更改,的搜索功能应该可以正常工作,并且每次搜索都会返回正确的结果。
标签:python,flask,search From: 78759501