2014-03-05 110 views
0

我正在研究python GAE(帶有jijna2)項目。這個想法是讓模板根據我的請求國際化值繼承自己。
比如我有一個模板目錄樹:基於語言的Jinja2模板繼承

templates 
---- base.html 
---- site_nav.html 
---- CA 
-------- site_nav.html 
-------- fr 
------------ site_nav.html 

現在,當加拿大/法國用戶請求一個模板,我想Jijna2尋找它在templates/CA/fr目錄,如果沒有找到看在templates/CA如果沒有在templates然後最終提出TemplateDoesNotExist。像templates/CA/fr/site_nav.html更深的模板將只有:

{% extends site_nav.html %} # to extend the templates/CA/site_nav.html 
{% block logged_in %} 
    Canadian French content 
{% endblock logged_in %} 

由於templates/CA/site_nav.html是不存在的,我們從templates/site_nav.html包含延長:

{% block logged_in %} 
    American content 
{% endblock logged_in %} 

我想從任何地方包括它利用{% include 'site_nav.html' %}並有適當的(更深)的模板,如果我的國籍需要它。

這只是我在這一刻起牀的解決方案。我知道這可能是不可能的,尤其是{% extends site_nav.html %},它不應該試圖擴展自己,但最終是父母。

這只是一個例子,我希望有一個很好的Pythonic這樣做的方式。

+0

爲什麼不使用i18n模塊? http://mikeshilkov.wordpress.com/2012/07/26/enable-jinja2-and-i18n-translations-on-google-appengine/ –

回答

0

當您使用Jinja函數加載器時,您可以控制如何加載模板。

文檔:http://jinja.pocoo.org/docs/api/#loaders

例子:我用一個函數加載器加載從數據庫中每一個模板,並在基本模板的內容塊創建子模板。函數加載器還可以讀取項目(路徑)中的模板。