【问题标题】:Redirect flask route if input matches something in data struct如果输入与数据结构中的某些内容匹配,则重定向烧瓶路线
【发布时间】:2014-04-16 23:47:03
【问题描述】:

应该很基本。我正在使用我正在开发的烧瓶应用程序进行一些搜索。

@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

对于那些不擅长阅读代码的人,如果可以在我正在使用的数据结构中找到 url 中传递的内容,我将尝试采取另一条路线。但是,当我尝试这个时,我会在 url 栏中看到

http://my_site_name/search_results/search_string

所以它显然没有调用我的 displayInfomation 函数。我尝试了对我来说似乎很直观的事情,有谁知道如何做到这一点?

【问题讨论】:

  • 什么是data_struct 并且在所述结构中有一个项目叫做'search_string'?还有你用的是什么版本的python?哦,你为什么不return redirect(url_for('displayInformation' search_string=search_string) 而不是调用另一个视图
  • @JoeDoherty:这里的data_struct 或 Python 版本为什么重要?
  • data_struct 是全局的,不用担心
  • @Zack: 好吧,如果search_string in data_struct 总是 False,那将是一个问题。
  • @MartjinPieters 我试图涵盖所有基础 我知道问题将在于我没有检查的另一个视图的返回我认为它会通过错误所以我想确保'in ' 肯定会触发,python 版本的主要原因是我想知道这是否是结构中数据的 ascii-unicode 东西

标签: python url redirect routing flask


【解决方案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_stringredirect() 会创建一个具有 302 重定向状态的响应。

【讨论】:

  • 这对函数名有效吗?您链接的文档看起来像是带有 url,但没有示例可以确认。尝试了您写的内容,但仍然遇到相同的错误。
  • @Zack: url_for() 采用路由名称,默认为函数名称。您的示例未设置路由名称。
  • @Zack: 同样的错误。您没有在问题中谈论错误。如果你没有被重定向,那么if search_string in data_struct 不是 True。
  • @Zack:为了测试,将return redirect(...) 移出if 语句,看看会发生什么。
  • 好的,弄清楚为什么我的工作不像你的那样,这是一件小事,我正在修改我没有显示的 search_string。谢谢你的帮助! :D
猜你喜欢
  • 2012-08-05
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多