我正在尝试实施重定向,以便在菜单栏上选择特定语言时将我的用户带回上一页。
我有这个功能:
@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模式?
答案 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错误的请求响应。