2014-01-22 57 views
8

我有這樣的HTML代碼段,這需要在很多地方被使用在Jinja2的模板:中的Jinja2重用的代碼塊在幾個地方

<div class="usedalot">{{ somevalue }}</div> 

例如,在template1.html,template2.html 。 template3.html,這個代碼重複幾個地方

<!-- template1.html, template2.html. template3.html --> 
<div class="usedalot">{{ somevalue }}</div> 
...... 
<div class="usedalot">{{ somevalue }}</div> 
.... 
<div class="usedalot">{{ somevalue }}</div> 
...... 

而是複製和粘貼的,有什麼方法使用此代碼段作爲一個塊? jinja2模板繼承(帶塊)似乎不能解決這個問題。

回答

23

你在找什麼叫做macro

宏放置在單獨的文件中(例如,macros.html)。

{% macro usedalot(somevalue) %} 
    <div class="usedalot">{{ somevalue }}</div> 
{% endmacro %} 

然後,您可以導入您的宏在其他模板

{% from 'macros.html' import usedalot %} 

,然後使用他們時需要

{{ usedalot(1) }} 

這將輸出

<div class="usedalot">1</div> 
+0

這是如此令人難以置信的醜陋雖然。我的意思是說,如果你的論點是'1',那看起來確實很好如果你的論點是HTML的一大塊呢? – Toskan

+0

爲什麼要在模板中的字符串文字中定義HTML?這聽起來像是一種代碼味道。 – dirn

+0

沒有。我說的是,我不想那麼做。問題是:我該怎麼做?看到這裏https://stackoverflow.com/questions/45113110/jinja2-templating-with-components-blocks-templates – Toskan