#33179: Show helpful error message when first argument to shortcuts.render is 
not
request
-------------------------------+---------------------------------------
     Reporter:  Joel Sleppy    |                    Owner:  Joel Sleppy
         Type:  New feature    |                   Status:  assigned
    Component:  Uncategorized  |                  Version:  dev
     Severity:  Normal         |               Resolution:
     Keywords:                 |             Triage Stage:  Unreviewed
    Has patch:  1              |      Needs documentation:  0
  Needs tests:  0              |  Patch needs improvement:  0
Easy pickings:  0              |                    UI/UX:  0
-------------------------------+---------------------------------------
Description changed by Joel Sleppy:

Old description:

> This is one of a class of changes I'm interested in making, so please
> also comment on if developer experience/error message improvements like
> this are wanted in general.
>
> I recently started a new Django project and got frustrated at tiny
> mistakes I made that were difficult to find because of opaque error
> messages.
>
> Currently, writing this:
>
> {{{
> #!python
> def render_view_missing_request(request):
>     return render('shortcuts/render_test.html')
> }}}
>
> leads to:
>
> {{{
> TypeError: render() missing 1 required positional argument:
> 'template_name'
> }}}
>
> which is very confusing because the developer ''did'' provide the
> template name.
>
> Writing another common variation:
>
> {{{
> #!python
> def render_view_missing_request(request):
>     return render('shortcuts/render_test.html', {'foo': 'FOO'})
> }}}
>
> leads to:
>
> {{{
> TypeError: join() argument must be str or bytes, not 'dict'
> }}}
>
> which is easier to figure out given the stack trace, but still unhelpful
> to a newcomer.

New description:

 This is one of a class of changes I'm interested in making, so please also
 comment on if developer experience/error message improvements like this
 are wanted in general.

 I recently started a new Django project and got frustrated at tiny
 mistakes I made that were difficult to find because of opaque error
 messages.

 Currently, writing this:

 {{{
 #!python
 def render_view_missing_request(request):
     return render('shortcuts/render_test.html')
 }}}

 leads to:

 {{{
 TypeError: render() missing 1 required positional argument:
 'template_name'
 }}}

 which is very confusing because the developer ''did'' provide the template
 name.

 Writing another common variation:

 {{{
 #!python
 def render_view_missing_request(request):
     return render('shortcuts/render_test.html', {'foo': 'FOO'})
 }}}

 leads to:

 {{{
 TypeError: join() argument must be str or bytes, not 'dict'
 }}}

 which is easier to figure out given the stack trace, but still unhelpful
 to a newcomer.

 I propose inspecting the first argument's class name to return a message
 like this:

 {{{
 #!python
 "First argument to render() must be an HttpRequest, not 'str'."
 }}}

 Similar type inspection is done in other shortcut functions such as
 `get_object_or_404`.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33179#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/066.dd96dbb5d0fa9494445d2da51c3fbb1f%40djangoproject.com.

Reply via email to