Opened 3 years ago

Last modified 3 years ago

#33179 closed Cleanup/optimization

Show helpful error message when first argument to shortcuts.render is not request — at Version 4

Reported by: Joel Sleppy Owned by: Joel Sleppy
Component: HTTP handling Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Joel Sleppy)

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:

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, but nothing can be done about this as far as I know without changing the function signature. Please let me know if there's a way to handle this case nicely, though.

Writing another common variation:

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:

"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.

Change History (4)

comment:1 by Joel Sleppy, 3 years ago

Owner: changed from nobody to Joel Sleppy

comment:3 by Joel Sleppy, 3 years ago

Description: modified (diff)

comment:4 by Joel Sleppy, 3 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top