【问题标题】:Cant route urls with Flask-babel and blueprints when url doesnt specify language当 url 未指定语言时,无法使用 Flask-babel 和蓝图路由 url
【发布时间】:2014-11-26 01:56:02
【问题描述】:

我已经在 Flask-babel 周围挖掘了一段时间,但似乎无法通过简单的 blueprint 获得 url routing。这是精简后的应用程序

在我的 __ 初始化 __.py 文件中

app = Flask(__name__)
babel.init_app(app)


@babel.localeselector
def get_locale():
    return g.get('lang_code', 'fr')


from .mod_main import mod_main as main_blueprint
app.register_blueprint(main_blueprint,url_prefix='/<lang_code>')

blueprint views.py 文件中

@mod_main.url_defaults
def add_language_code(endpoint, values):
    values.setdefault('lang_code', g.lang_code)


@mod_main.url_value_preprocessor
def pull_lang_code(endpoint, values):
    g.lang_code = values.pop('lang_code')


@mod_main.route('/', methods=['GET', 'POST'])
def index():
    return render_template('main/index.html')

只要我导航到http://localhost:5000/fr,它就可以很好地工作,但是当我导航到http://localhost:5000/(没有lang)时,我得到404错误。正常 - 因为蓝图需要一个 lang_code 作为前缀。

当用户第一次导航到http://localhost:5000/(不带语言)时,我希望该网站显示语言为“fr”的页面。如果用户然后将其切换到英语并导航到http://localhost:5000/,我希望它以英语而不是法语显示。似乎无法正常工作!!!

【问题讨论】:

  • 您没有为'/' 注册的路由。蓝图的所有路由都以'/&lt;lang_code&gt;'开头。

标签: python flask url-for python-babel flask-babel


【解决方案1】:

我终于找到了解决方案 - 我需要做的就是在应用程序上添加一个 before_request 函数来检查 request.view_args 并根据会话变量提供正确的语言。

我还发现flask 中的g 变量仅对活动请求有效,不能用于跨请求存储值。 (因为我试图跨请求将 lang 存储在 g 变量上 - 必须使用会话变量来跨请求传输值)

我刚刚上传了一个精简的应用程序,在此处实现带有蓝图的 babel:https://github.com/shankararul/simple-babel

【讨论】:

  • 你好,你能告诉我如何处理有蓝图但没有 babel 的 2 语言吗?
猜你喜欢
  • 1970-01-01
  • 2018-09-26
  • 2020-03-09
  • 2012-11-25
  • 2011-01-09
  • 2013-01-16
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
相关资源
最近更新 更多