3

我刚开始玩 Flask,所以很可能我只是错过了一些明显的东西,但对于其他人来说,这可能是个好问题,也寻找相同的答案:)

我想创建 Flask 应用程序,它将侦听多语言 URL。所以我想要的是一个端点将在 /news/111 上监听,就像 /naujiena/111 一样(例如立陶宛语)。

所以一个明显的解决方案是给视图函数提供一些路由,比如:

@app.route('/news/<id>')
@app.route('/naujiena/<id>')
def news_view(id): pass

哪个应该有效,但显然稍后添加新语言或只是更新链接会在(一些私密的地方)痛苦。

我想到的另一个解决方案是,我可以有一个文件来定义真实视图函数,然后是一些“语言视图”文件,我只需在其中获取请求,然后从其他文件中查询真实视图函数。像

新闻.py

def news_view(id): pass

news_en.py

from news import news_view
@app.route('/news/<id>')
def news_view_en(id):
    return news_view(id)

新闻_lt.py

from news import news_view
@app.route('/naujiena/<id>')
def news_view_lt(id):
    return news_view(id)

这还不错,至少可以以某种方式很好地组织起来。但我打赌应该有一些我想念的东西:) 那么伙计们,那是什么?:) 欢迎提出任何建议。

谢谢!

4

1 回答 1

4

您可以使用该add_url_rule()函数动态路由 URL:

view_functions = [news_view, foo_view, bar_view]

for view in ['news', 'foo', 'bar']:
  for translation in translations[view]:
     app.add_url_rule('/{}/'.format(translation), view, view_functions[view])
于 2012-08-05T07:41:19.240 回答