Django: render, redirect, reverse, resolve
Let’s try to highlight every useful ‘r… thing’ in Django.
Shortcut functions (django.shortcuts)
Render
render(request, template_name, context=None, content_type=None, status=None, using=None)
Combines a template with a context dictionary, returns an HttpResponse object with that rendered text.
Render to response
Deprecated since v2.0!
render_to_response(template_name, context=None, content_type=None, status=None, using=None)
Works similarly to render(), except that it doesn’t make the request available in the response. To use RequestContext you have to specify context_instance=RequestContext(request)
Redirect
redirect(to, permanent=False, *args, **kwargs)
Returns HttpResponseRedirect object to the appropriate URL for the arguments passed:
- model: will call get_absolute_url() function
- view (with optional arguments): will use reverse() function to reverse-resolve the name.
- URL (absolute or relative): will be used as-is for the redirect location.
Utility functions (django.urls)
Reverse
reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
Returns URL to the view as string. Similar functionality to the url template tag which is used to convert namespaced url to real url pattern.
Viewname can be a URL name or the callable view function/class. If the URL accepts arguments, you may pass them in args OR kwargs.
Reverse lazy
reverse_lazy(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
Returns object, a lazily evaluated version of reverse() when you need to use a URL reversal before your project’s URLConf is loaded for example in:
- generic class-based view (because in Python class attributes are evaluated on import)
- decorator (eg. permission_required()).
- default value for a parameter in a function’s signature.
Resolve
resolve(path, urlconf=None)
Resolves URL paths to the corresponding view functions.