【问题标题】:How can I pass a dictionary from a route function to another?如何将字典从路由函数传递给另一个?
【发布时间】:2020-01-10 11:00:59
【问题描述】:

我是 Python/Flask 的新手。我需要将名为“dict”的“cmz”函数中的字典传递给“form”函数,以便调用html模板并将相同的字典传递给页面。 我被卡住了,因为当我运行它时,我只得到一个字符串值而不是一个对象。

我试图在“form”函数的参数“params”之前设置'**',但它对我不起作用。

这是我的代码,感谢任何人的建议!

@app.route('/form<params>')
def form(params):
    return render_template('index.html', result = params)

@app.route('/page/<distrib>')
def cmz(distrib):
    if distrib == "cmz":
        dict = {'aaa' : 'bbb', 'ccc' : 'ddd'}
        return redirect(url_for('form', params = dict))

【问题讨论】:

  • 一个 URL 本质上只能将 strings 传递到后端。 Flask 确实允许您指定参数可以是整数或浮点数,因为这些是常见的用例并且实现起来并不复杂 - 但是如果不以某种方式将其序列化,您就不能在 URL 中传递像 dict 这样的复杂对象.这绝对是可行的,但我很好奇你为什么需要这样做,因为我无法想象一个用例。 (例如,如果数据来自您的数据库,那么只需在您的 URL 中传递行 ID,并在适当的视图中使用它从数据库中提取信息。)

标签: python flask


【解决方案1】:

这可以通过使用会话来完成。

您需要将其导入

from flask import session

您还需要确保使用设置密钥

app.secret_key = 'a random string'

之后,您可以在会话中添加字典

dict = {'aaa' : 'bbb', 'ccc' : 'ddd'}
session['dict'] = dict

在另一条路线中,您可以通过反转该行来检索字典

dict = session['dict']

如果这不能解决您的问题,请告诉我,我很乐意提供帮助!

【讨论】:

  • 两种解决方案都可以正常工作! Json 和 Session 方法以不同的方式实现目标,但都非常好!现在我只需要给他们一个深入的阅读,以便更好地了解他们是如何工作的。非常感谢!
【解决方案2】:

您可以以字符串形式(例如"{1:2,2:3}")传递字典,然后将其转换回来。 幸运的是,关于如何做到这一点,已经有一个很好回答的问题 - Convert a python dict to a string and back

最简单的似乎如下:

import json
json.dumps()

【讨论】:

  • 两种解决方案都可以正常工作! Json 和 Session 方法以不同的方式实现目标,但都非常好!现在我只需要给他们一个深入的阅读,以便更好地了解他们是如何工作的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 2020-05-13
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
相关资源
最近更新 更多