Opened 19 years ago

Closed 19 years ago

Last modified 17 years ago

#128 closed defect (worksforme)

IndexError when using invalid {% extends %} in template should be replaced with better error message.

Reported by: espen@… Owned by: Adrian Holovaty
Component: Template system Version:
Severity: normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

First of all the error

There's been an error:

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/django/core/handlers/wsgi.py", line 190, in get_response
    return callback(request, **param_dict)

  File "/home/espen/django/blog/apps/blog/views/blog.py", line 20, in details
    return HttpResponse(t.render(c))

  File "/usr/lib/python2.4/site-packages/django/core/template.py", line 116, in render
    return self.nodelist.render(context)

  File "/usr/lib/python2.4/site-packages/django/core/template.py", line 437, in render
    bits.append(node.render(context))

  File "/usr/lib/python2.4/site-packages/django/core/template_loader.py", line 80, in render
    parent_is_child = isinstance(compiled_parent.nodelist[0], ExtendsNode)

IndexError: list index out of range

The template file that trys to extend base.html:

{% extends "base" %}

	{% block title %}
		Espen Grindhaug - Blog - {{ obj.headline }}
	{% endblock %}
	
	
	{% block content %}
		<h1>{{ obj.headline }}</h1>
		<p class="summary">{{ obj.summary }}</p>
		<p class="body">{{ obj.body }}</p>
		<p class="by">By {{ obj.author }} ({{ obj.pub_date }})</p>
	{% endblock %}

The weird thing here is that I get exactly the same error with completly different child template.

base.html (the same as in URL):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}Espen Grindhaug{% endblock %}</title>
</head>

<body>
    <div id="sidebar">
        {% block sidebar %}
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
        {% endblock %}
    </div>

    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>

The details function in blog.py that loads the template:

def details(request, slug):
	try:
		obj = entries.get_object(slug__exact=slug)
	except entries.EntryDoesNotExist:
		raise Http404
	t = template_loader.get_template('blog/details')
	c = Context(request, { 'obj':obj,})
	return HttpResponse(t.render(c))

Change History (9)

comment:1 by Adrian Holovaty, 19 years ago

Very strange. Is your base template called "base.html", and is it within your template root, rather than being in the "blogs" subdirectory of the template root?

comment:2 by espen@…, 19 years ago

Resolution: fixed
Status: newclosed

The simple solution was to change {% extends "base" %} to {% extends "blog/base" %}

*a little bit ashamed* :/

comment:3 by Jacob, 19 years ago

Resolution: fixed
Status: closedreopened
Summary: IndexError when using {% extends "base" %} in template.IndexError when using invalid {% extends %} in template should be replaced with better error message.

That error message is extremely unhelpful; I'm reopening this ticket and changing the title to indicate that we should fix the error message.

comment:4 by Adrian Holovaty, 19 years ago

milestone: Version 1.0

comment:5 by Adrian Holovaty, 19 years ago

Status: reopenednew

comment:6 by Adrian Holovaty, 19 years ago

Status: newassigned

comment:7 by Adrian Holovaty, 19 years ago

Resolution: worksforme
Status: assignedclosed

I set about fixing this error message, but I can't reproduce it. I get a "Template 'base' cannot be extended, because it doesn't exist" message, which is expected behavior. Please reopen if you can reproduce the strange IndexError.

comment:8 by espen@…, 19 years ago

I can't reproduce it any more either.

comment:9 by (none), 18 years ago

milestone: Version 1.0

Milestone Version 1.0 deleted

Note: See TracTickets for help on using tickets.
Back to Top