Error Message Hell
If there's one thing anyone that works with computers hates, it's an
error message that is misleading or vague. "Syntax Error", "Bad Command
Or File Name", "General Protection Fault", and so forth have haunted
us for ages; kernel panics, strange reboots, devices that just don't
seem to be recognised by the system, and programs mysteriously
disappearing likewise. The trend has been to give people more
information, and preferably a way to understand what they need to do to
fix the problem.
I blog this because I've just been struggling with a problem in Django for the last day or so, and after much experimentation I've finally discovered what the error really means. Django, being written in Python, of course comes with huge backtraces, verbose error messages, and neat formatting of all the data in the hopes that it will give you more to work with when solving your problem. Unfortunately, this error message was both wrong - in that the error it was complaining about was not actually correct - and misleading - in that the real cause of the error was something else entirely.
Django has a urls.py file which defines a set of regular
expressions for URLs, and the appropriate action to take when receiving
each one. So you can set up r'/poll/(?P
url(r'/poll/(?P
And then in your templates you can say:
<a href="{{ url poll_view_one poll_id=poll.id }}">{{ poll.name }}</a>
Django will then find the URL with that name, feed the poll ID in at the appropriate place in the expression, and there you are - you don't have to go rewriting all your links when your site structure changes. This, to me, is a great idea.
The problem was that Django was reporting that "Reverse for 'portal.address_new_in_street' not found." when it was clearly listed in a clearly working urls.py file. Finally, I started playing around with the expression, experimenting with what would work and what wouldn't in the expression. In this case, the pattern was:
new/in/(?P
When I changed this to:
new/in/(?P
It suddenly came good. And then I discovered that the the thing being
fed into the 'suburb_id' was not a number, but a string. So what that
error message really means is "The pattern you tried to use didn't
match because of format differences between the parameters and the
regular expression." Maybe it means that you can have several patterns
with the same name that will try to match based on the first such pattern
that does so. But until then, I'll remember this; and hopefully someone
else trying to figure out this problem won't butt their head against a
wall for a day like I did.
posted at: 16:13 | path: /tech/web | permanent link to this entry
All posts licensed under the CC-BY-NC license. Author Paul Wayper.