3

Base.html extends into create.html

base.html

{% block title %}Index{% endblock %}
{% block body %} 
<h1>Index</h1>
    <p class="important">
      Welcome to my awesome homepage.
    </p>
{% endblock %}

create.html

{% extends "base.html" %}

{% block title %}Index1{% endblock %}
{% block content %} 
<p class="important">
         first message.
        </p>
{% endblock %}


{% block title %}Index2{% endblock %}
{% block content %} 
<p class="important">
         second message.
        </p>
{% endblock %}

...

{% block title %}Indexn{% endblock %}
{% block content %} 
<p class="important">
         nth message.
        </p>
{% endblock %}

how to extend base.html and repeat template on a single file repeatedly as above? any suggestion.

user3145195
  • 45
  • 1
  • 7

1 Answers1

5

You can use macro tag and your template will look like this

{% macro create_block(title, message) %}
    <h1>{{title}}</h1>
    <p class="important">
      {{message}}
    </p>
{% endmacro %}

{% for title, message in list %}
    {{ create_block(title, message) }}
{% endfor %}

I test it and it's my script:

from jinja2 import Template

titles = ['1 title', '2 title']
messages = ['1 message', '2 message']


template = Template("""
{% macro create_block(title, message) %}
<h1>{{title}}</h1>
    <p class="important">
      {{message}}
    </p>
{% endmacro %}

{% for title, message in list %}
{{ create_block(title, message) }}
{% endfor %}
""")

print template.render(list=zip(titles, messages))

And it's my output

    <h1>1 title</h1>
    <p class="important">
      1 message
    </p>

    <h1>2 title</h1>
    <p class="important">
      2 message
    </p>

I hope it solved you problem

Dima Kudosh
  • 7,126
  • 4
  • 36
  • 46