2015-07-10 61 views
1

和「模板」目錄我正在尋找一種方式有單獨'template''includes'目錄與Jinja2的,只允許單獨的「包括」爲Jinja2的

例如說我有以下的目錄佈局:

/templates/ 
    base.html 
/includes/ 
    header.html 
    footer.html 

我想,以確保應用程序級get_template只有base.html看到它,那include模板聲明只有header.htmlfooter.html提供給它。

我知道,我可以兩個目錄添加到裝載機,如:

loader = jinja2.FileSystemLoader(['/templates/', '/includes/']) 
env = jinja2.Environment(loader=loader) 
template = env.get_template('base.html') 

但是,這並沒有給我,我要找的兩個不同的模板類型的嚴格分離。

有沒有辦法強制這種分離,所以.get_template('base.html')會成功,但{% include 'base.html' %}會失敗?

有什麼方法可以使用兩個不同的加載器,一個最初獲取模板,另一個將在渲染模板時使用?

例如,我可以做這樣的事情?......

base_loader = jinja2.FileSystemLoader('/templates/') 
includes_loader = jinja2.FileSystemLoader('/includes/') 

base_env = jinja2.Environment(loader=base_loader) 
includes_env = jinja2.Environment(loader=includes_loader) 

template = env.get_template('base.html') 
template.env = includes_env 

回答

1

template實例都有一個environment屬性,所以它看起來像它可能做到這一點...

base_loader = jinja2.FileSystemLoader('/templates/') 
includes_loader = jinja2.FileSystemLoader('/includes/') 

base_env = jinja2.Environment(loader=base_loader) 
includes_env = jinja2.Environment(loader=includes_loader) 

template = env.get_template('base.html') 
template.environment = includes_env 

這應確保只有/includes/目錄中的文件可用於{% include ... %}模板語句。