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.