برای هرچه پویاتر شدن قالب های مورد استفاده در فلاسک علاوه بر اینکه نیاز به امکان استفاده از متغییرها داریم باید بتوانیم ساختارهای کنترلی نیز مورد استفاد قرار دهیم. بطور مثال اگر یک متغییر لیست به قالب ما پاس داده شود باید بتوانیم روی آن loop بزنیم و عناصر آنرا نمایش دهیم. 

بدین منظور jinja2 امکان استفاده از ساختارهای کنترلی را به قالب ها اضافه کرده است. بطور مثال برای استفاده از if باید از دستورات زیر استفاده نماییم :



یا برای استفاده از for باید از دستورات زیر استفاده نماییم :



علاوه بر این دو مورد jinja2 امکان استفاده از ماکروها که ساختاری شبیه به توابع در پایتون هستند را به قالب ها اضافه کرده است. بطور مثال کد زیر را در نظر بگیرید :



برای اینکه بتوانیم از ماکروها مکررا استفاده کنیم این امکان وجود دارد که آنها را در فایلی جداگانه ذخیره کرده و سپس هرجا نیاز داریم آنها را به قالب خود اضافه نماییم :



همینطور هرگاه نیاز داشتیم تا یک بخش از کد مربوط به قالب را در تعداد زیادی از فایل ها اضافه کنیم می توانیم آنها را include نماییم. 



علاوه بر تمامی موارد مطرح شده در بخش قبل قدرتمندترین ابزاری که می توان از آن در قالب ها استفاده کرد ارث بری می باشد. مانند ارث بری در کلاس های پایتون ابتدا باید یک کلاس پایه یا base داشته باشیم که آنرا در فایلی با نام base.html ذخیره کرده ایم :



در این بخش بلاک هایی را مشخص کردیم که امکان دارد در قالب هایی که از آن ارث می برند تغییر کنند. بطور مثال در این مثال بلاک های head و title و body را می بینیم که امکان تغییر آن در زیرقالب آنها امکان پذیر می باشد. حال مثالی را می بینیم که یک زیرقالب از قالب base تشکیل شده است. 



کلمه کلیدی extends مشخص می کند که ما بطور مشخص از کدام قالب ارث بری می نمایم. علاوه بر این برای بلاک های قابل تغییری که در قالب اصلی و پدر مشخص کردیم می توانیم کدهای جدیدی را در نظر بگیریم. توجه کنید که مثلا در بلاک head از زیرقالب ما از مفهومی به نام super() استفاده کرده ایم که به معنی انجام عملیات اصلی کلاس پایه می باشد. پس برای این بلاک عملکرد زیرقالب دقیقا همانند قالب پایه می باشد.