Django, how to use render_to_response with many templates

django, python, templates

Solution

Option 1) Try using the `{% include %}` tag.

`main.html`

<head> ... </head>
<body>
{% block content %}
{% endblock content %}

`template1.html`

{% extends "main.html" %}
{% block content %}
     <h1>Hello world</h1>
     {% include "nested_template2.html" %}
{% endblock content %}

`nested_template2.html`

<p>The world is smaller than you think.</p>

In your view/controller:

return render_to_response('template1.html', {

Option 2) Chain `{% extends ... %}` tags as deep as you want. I frquently use this structure:

templates/
----base.html
----projects/
    ----_.html
    ----detail.html
    ----list.html

The `base.html` is the master layout. The `folder/_.html` is specific to a "stage" (more modular content).

`base.html`

<head> ... </head>
<body>
{% block stage_content %}
{% endblock stage_content %}

`projects/_.html`

{% extends "main.html" %}
{% block stage_content %}
     <h1>Project Stage</h1>
     {% block page_content %}
     {% endblock page_content %}
{% endblock stage_content %}

`projects/list.html`

{% extends "projects/_.html" %}

{% block page_content %}
   {% for project in projects %}
       <li>{{ project.name }}</li>
   {% endfor %}
{% endblock page_content %}

`projects/detail.html`

{% extends "projects/_.html" %}

{% block page_content %}
   Viewing project {{ project.name }}
{% endblock page_content %}

In your view/controller:

return render_to_response('projects/detail.html', {

Problem

Hello i am newbie in Django, started to learn it today and i have problem with template inheritance i have such function in my view: ``` def show(request, id=1): return render_to_response('template1.html', { 'name': name, 'model1': Model1.objects.get(id=id), 'model2': Model2.objects.get(id=id).model1, }) ``` And i have 3 different templates, main.html with such code: ``` <body> {% block block1 %} {% endblock %} {% block block2 %} {% endblock %} </body> </html> ``` and two more tempaltes that contains code like that: ``` {% extends 'main.html' %} {% block block1 %} <h2>{{ var }}</h2> <pre>{{ var }}</pre> {% endblock %} ``` second one is very similar so i wont show it, problem is: i dont know which one to put in render_to_response function. if i put main.html: ``` return render_to_response('main.html', { ``` it doesn't load any templates, but content from main.html appears well, i can just see empty space on page if i put template1: ``` return render_to_response('template1.html', { ``` It load only content from main and from template1.html but i need content from template2.html if i put template2.html to function it only shows content from main.html and from template2.html but no content from template1.html Please help me how to solve that problem.

Original source