2012-08-05 120 views
2

我刚开始用瓶玩,所以很可能我只是错过了一些东西明显,但也许它可能是很好的问题,别人也找了同样的答案:)多语言网址

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

因此,一个显而易见的解决方案是给少数航线视图功能,如:

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

这应该工作,但显然它会在(一些贴心之处)疼痛在以后添加新的语言或只是为了更新链接。

我脑海中另一个解决方案是,我可以在一个文件中定义真实视图功能,然后在一些“语言视图”文件中抓取请求,然后从其他文件查询真实视图功能。像

news.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) 

news_lt.py

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

这是不坏,在leats可以很好地以某种方式组织。但我敢打赌,应该有我想念的东西:)所以,伙计们,那是什么? :)欢迎任何建议。

谢谢!

回答

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]) 
+0

这是酷!感谢Blender,我说我错过了一些聪明的东西:) – 2012-08-05 12:10:50

+0

@Blender但是,然后,如何在url_for中调用正确的url? – 2013-07-24 14:57:19

+1

@PaoloCasciello:创建这些路由后,查看'app.url_map'。 – Blender 2013-07-24 18:31:35