Opened 13 years ago
Closed 12 years ago
#18418 closed Bug (fixed)
Debug doesn't catch exception instead complains views does not exist
| Reported by: | yeukhon | Owned by: | nobody | 
|---|---|---|---|
| Component: | Core (URLs) | Version: | 1.4 | 
| Severity: | Normal | Keywords: | debug | 
| Cc: | Triage Stage: | Accepted | |
| Has patch: | no | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description (last modified by )
Suppose we have this forms.py:
class SubmitButtonField(forms.Field):
     # here we write a custom field....
class Editor(forms.Form):
    script_name = forms.CharField(max_length=60, min_length=1)
    view_level = forms.ChoiceField(widget=forms.widgets.RadioSelect, choices=VIEW_LEVEL)
    text_box = forms.CharField(widget=forms.widgets.Textarea, required=False)
    save_button = forms.SubmitButtonField(required=False)
    # notice save_button above....
Notice that save_button has an error. I accidentally added forms. in the beginning. This is invalid, and Python will raise exception.
However, when we try to visit the page, it complains about myapp.views.view_name does not exist.
I fired up django shell, and when I import myapp.views I got this error:
AttributeError: 'module' object has no attribute 'SubmitButtonField'
Django debug page does not really catch this kind of exception. Is this a bug or an enactment-to-be-made? 
Change History (4)
comment:2 by , 13 years ago
| Component: | Uncategorized → Core (URLs) | 
|---|---|
| Triage Stage: | Unreviewed → Accepted | 
| Type: | Uncategorized → Bug | 
Indeed, this is raising an AttributeError, which is caught in django.core.urlresolvers.get_callable(). A completely different exception is then raised.
Django (generally) shouldn't mask exceptions.
comment:3 by , 12 years ago
How can I reproduce it?
# app18418/forms.py
from django import forms
class SubmitButtonField(forms.Field):
    pass
class AForm(forms.Form):
    save_button = forms.SubmitButtonField(required=False)
# cat app18418/views.py
import app18418.forms
def a_view(request):
    form = app18418.forms.AForm()
# app18418/urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
    url(r'^$', 'app18418.views.a_view', name='home'),
)
Visiting / properly raises the exception:
AttributeError at / 'module' object has no attribute 'SubmitButtonField'
comment:4 by , 12 years ago
| Resolution: | → fixed | 
|---|---|
| Status: | new → closed | 
It's already fixed by:
commit 367bfaa5226eaae3278989e63f16063d5cc46cd8
Author: Florian Apolloner <florian@apolloner.eu>
Date:   Tue Aug 14 21:12:08 2012 +0200
    Don't swallow AttributeError in core.urlresolvers.get_callable.
which made its way into 1.5
Replaced the link to a paste site with the actual content, in case the past site disappears.