2012-08-05 149 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