﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
33179	Show helpful error message when first argument to shortcuts.render is not request	Joel Sleppy	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:

{{{
#!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, 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:

{{{
#!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`."	Cleanup/optimization	closed	HTTP handling	dev	Normal	wontfix			Unreviewed	1	0	0	0	0	0
