当前位置: 首页 > 面试题库 >

传递参数时重定向

宿衡虑
2023-03-14
问题内容

在flask中,我可以这样做:

render_template("foo.html", messages={'main':'hello'})

并且如果foo.html包含{{ messages['main'] }},页面将会显示hello。但是,如果有一条通往foo的路线怎么办:

@app.route("/foo")
def do_foo():
    # do some logic here
    return render_template("foo.html")

在这种情况下,如果我仍然希望这种逻辑发生,那么进入foo.html的唯一方法是通过redirect

@app.route("/baz")
def do_baz():
    if some_condition:
        return render_template("baz.html")
    else:
        return redirect("/foo", messages={"main":"Condition failed on page baz"}) 
        # above produces TypeError: redirect() got an unexpected keyword argument 'messages'

因此,如何使该messages变量传递到foo路由,这样我不必在加载路由之前重写重写该路由计算的逻辑代码?


问题答案:

你可以将消息作为显式URL参数传递(正确编码),也可以session在重定向之前将消息存储到(cookie)变量中,然后在呈现模板之前获取变量。例如:

def do_baz():
    messages = json.dumps({"main":"Condition failed on page baz"})
    session['messages'] = messages
    return redirect(url_for('.do_foo', messages=messages))

@app.route('/foo')
def do_foo():
    messages = request.args['messages']  # counterpart for url_for()
    messages = session['messages']       # counterpart for session
    return render_template("foo.html", messages=json.loads(messages))

(可能不需要对会话变量进行编码,flask可能正在为你处理它,但无法调用详细信息)



 类似资料:
  • 问题内容: 我正在尝试使用Struts2实现以下目标 这就是我在做什么: 为什么以上内容不能重定向为以下任何建议: 问题答案: 到目前为止,对我有用的解决方案是 在操作中定义味精的设置者和获取者的位置

  • 我在我的web应用程序中使用SpringMVC和thymeleaf。 在其中一个场景中,我有一个控制器,在其功能结束时执行重定向。我需要向前端传递一个参数(实际上是一条成功/失败警报消息)。如何实现此行为。 我可以知道model.add属性()不能在重定向时实现。 以下是控制器代码。 下面是视图(thymeleaf)代码。[注意:我需要获取javascript变量的值]

  • 我是Android编程的新手,我正在学习一些组件和架构。 我现在在测试碎片。

  • 您可以将其他数据作为常规方法参数传递到后台任务。我再次使用下面的例子(希望没有让你厌恶): BackgroundJob.Enqueue(() => Console.WriteLine("Hello, {0}!", "world")); 在常规方法调用中,在执行后台作业期间, Console.WriteLine 方法将使用这些参数。为了参数传递进去,需要先序列化。 使用 了不起的 Newtonsof

  • 尽管应用中的大部分组件都依赖其他组件,但并不总是如此。同时 Windsor 用来查找满足依赖的正确组件的默认规则有时不得不进行调整。 如何做到这一点基于值的来源和获取值的地方。 Composition root - container.Resolve container.Resolve 方法有几个重载允许传递 IDictionary 作为参数(在这种情况下,建议使用 [Arguments] 类),

  • 问题内容: 我有一个像这样初始化的数据表: 以后我想做 它工作正常,但现在我想在该请求中发送一些参数。这些参数仅在重新加载时才需要,而在表的初始化中则不需要。我怎么做?谢谢! 问题答案: 选项1- 使用preXhr.dt事件。 看到这里http://datatables.net/reference/event/ 选项2(首选) -使用ajax.data函数。 两种选择都会产生相同的结果。您的服务器