2012-11-07 168 views
2

想這是我的代碼:的Jinja2:默認佈局

from jinja2 import Environment, PackageLoader 

def render(path, **kwargs): 
    env = Environment() 
    env.loader = PackageLoader('lemma.app.views', '') 
    template = env.get_template(path) 

    return str(template.render(**kwargs)) 

而且這是我的模板:

{% extends "layouts/application.html" %} 

{% block content %} 
    bla 
{% endblock %} 

有沒有辦法設置佈局在我的代碼,而不是在我的模板,還是應該我在每個模板中都寫了{% extends "layouts/application.html" %},就像白癡一樣?

+0

好像你已經回答了你自己的問題。 –

+0

您可以對Environment進行子類化,並將「父級」參數添加到連接{%extends%}聲明的get_template方法中。或者子類PackageLoader,無論你的船是否搖滾。 –

+0

順便說一句,看看[jinja2.BaseLoader](http://jinja.pocoo.org/docs/api/#jinja2.BaseLoader),你可以重寫get_source方法來自動插入{%extends%}標籤。無論如何,這是一個很好的問題,upvoted。 –

回答

0

最後,我定義了從PackageLoader繼承的類LemmaLoader,並且已經改寫了方法get_source

0

您可以在子模板的擴展中使用一個變量:{%extends layout%}。 這可以很容易地更改您的基礎/佈局模板,並可以選擇其他基礎/佈局模板。我使用擴展變量,因爲對於同一孩子的不同佈局模板。子模板是網頁的一部分或fancybox iframe的一部分。