烧瓶实施?争论而不是/

时间:2015-10-19 09:53:23

标签: python flask

我正在尝试实施重定向,以便在菜单栏上选择特定语言时将我的用户带回上一页。

我有这个功能:

@application.route('/locale/<locale>/redirect_to/<redirect_to>/', methods=['GET'])
def set_locale(locale, redirect_to):
  session['locale'] = locale
  return redirect(redirect_to)     # Change this to previous url

现在我有我的语言选项:

<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
  <li><a href="{{ url_for("set_locale", locale="en", redirect_to=request.path) }}">English</a></li>
  <li><a href="{{ url_for("set_locale", locale="es", redirect_to=request.path) }}">Spanish</a></li>
</ul>

然而,我一直遇到错误,因为request.path的格式为/ some / url / like / this /并且它一直搞乱了redirect_to参数,我可以在这里弄错路径未定义等错误。

传统上,开发人员使用?redirect_to=/home来解决这个问题。但是,我不知道是否有适当的方法来实现烧瓶中的?key = value模式,而不会使它变得如此不完整以至于当我改变时它会破坏。

我怎样才能在这里轻松实现?key = value模式?

2 个答案:

答案 0 :(得分:1)

在这种情况下,路径应该有所帮助:

from itertools import islice for car in islice(cars, 1, None): # do something

它允许redirect_to采用/ some / url / like / this / path。

答案 1 :(得分:1)

传递给url_for的任何不属于该路由的关键字参数都将包含在查询字符串中。

<a href="{{ url_for('set_locale', locale='en', redirect_to=request.path) }}">

然后您的端点会更改为与

类似的内容
@application.route('/locale/<locale>/')
def set_locale(locale):
    session['locale'] = locale
    redirect_to = request.args.get('redirect_to', '/')
    return redirect(redirect_to)

权衡是你不能在路线中强制redirect_to,所以你需要自己处理。我默认为'/'。另一种方法是

redirect_to = request.args['redirect_to']

如果redirect_to未包含在查询字符串中,则会导致Flask返回400错误的请求响应。