Я согласен с Дэниелом, тэги включения, вероятно, то, что вы ищете, и я думаю, что вы неправильно понимаете их и {% extends %}
.
Если ваш контент статический или в контексте, вы можете использовать блоки {% include%}, например
{% block content %}
{% include "columnlayout2.html" %}
{% include "columnlayout3.html" %}
{% endblock %}
чтобы вы могли хранить нужный вам контент в виде {{two_columns}} и {{three_columns}} и рендерить
------------------------------------------------------------
columnlayout2.html
------------------------------------------------------------
<div class="twocol container2">
<div class="container1">
<div class="col1">
{{ two_columns[0] }}
</div>
<div class="col2">
{{ two_columns[1] }}
</div>
</div>
</div>
Или вы можете использовать теги включения внутри page.html
EDIT
Модератору необходимо отображать HTML с другой структурой (не только с содержимым) на разных страницах, чтобы вы могли сделать что-то вроде «вложения» вызовов тега включения.
{% block content %}
{% show_two_columns two_columns %}
{% show_three_columns three_columns %}
{% endblock %}
templatetag
@register.inclusion_tag("columns/two_columns.html")
def show_two_columns(columns):
return {'columns': columns}
two_columns.html
<div class="twocol container2">
<div class="container1">
<div class="col1">
{% render_column columns[0] %}
</div>
<div class="col2">
{% render_column columns[1] %}
</div>
</div>
</div>
и тогда вы можете делать любую логику, которая вам нужна, чтобы изменить то, что вы хотите показать в теге включения render_column и в шаблоне, который он использует. Хотелось бы сказать больше, но это довольно точно зависит от того, от чего зависит содержимое столбца и насколько оно отличается в каждом конкретном случае.