如果输入与数据结构匹配,则重定向 Flask 路由

2 投票
1 回答
3447 浏览
提问于 2025-04-17 21:58

这应该是比较基础的内容。我正在开发一个Flask应用,做一些搜索的功能。

@app.route('/search_results/<search_string>', methods= ['GET', 'POST'])
def generateSearchResults(search_string = None):

    #an exact match
    if search_string in data_struct:
        return displayInfomation(search_string)

    else:
         #code that will figure out possible matches, and then render 
         #a template based on that

@app.route('/display_results/<search_string>', methods= ['GET', 'POST'])
def displayInfomation(search_string = None):

    #figures some stuff out based on the search string, then renders a template

对于那些不太会看代码的朋友,我想尝试另一种方法,如果在我使用的数据结构中能找到通过网址传入的内容。不过,当我这样做的时候,我在网址栏看到的内容是

http://my_site_name/search_results/search_string

所以很明显,它并没有调用我的displayInfomation函数。我尝试了我觉得直观的方法,有没有人知道该怎么做呢?

1 个回答

1

你这里其实是在重复使用另一个视图来进行渲染。如果你的 if search_string in data_struct 这个判断是 True,那么另一个视图就会像个函数一样被调用。这个过程和浏览器上显示的URL关系不大,因为浏览器并不知道或者不关心服务器在访问 /search_results/search_string 这个URL时做了什么。

如果你想让URL发生变化,你可以使用 redirect() 来告诉 浏览器 去加载另一个视图:

from flask import redirect, url_for


@app.route('/search_results/<search_string>', methods= ['GET', 'POST'])
def generateSearchResults(search_string = None):

    if search_string in data_struct:
        return redirect(url_for('displayInfomation', search_string=search_string))


@app.route('/display_results/<search_string>', methods= ['GET', 'POST'])
def displayInfomation(search_string = None):

调用 url_for() 会为 displayInformation 视图构建一个有效的URL,并自动填入 search_string,而 redirect() 则会创建一个带有302重定向状态的响应。

撰写回答