diff --git a/docs/ref/forms/api.txt b/docs/ref/forms/api.txt
index a6b4d11f4ad..8530af2611b 100644
--- a/docs/ref/forms/api.txt
+++ b/docs/ref/forms/api.txt
@@ -520,9 +520,15 @@ Although ``
`` output is the default output style when you ``print`` a
form, other output styles are available. Each style is available as a method on
a form object, and each rendering method returns a string.
-``template_name``
+Default rendering
-----------------
+The default rendering when you ``print`` a form uses the following methods and
+attributes.
+
+``template_name``
+~~~~~~~~~~~~~~~~~
+
.. versionadded:: 4.0
.. attribute:: Form.template_name
@@ -540,95 +546,8 @@ class.
In older versions ``template_name`` defaulted to the string value
``'django/forms/default.html'``.
-``template_name_label``
------------------------
-
-.. versionadded:: 4.0
-
-.. attribute:: Form.template_name_label
-
-The template used to render a field's ````, used when calling
-:meth:`BoundField.label_tag`/:meth:`~BoundField.legend_tag`. Can be changed per
-form by overriding this attribute or more generally by overriding the default
-template, see also :ref:`overriding-built-in-form-templates`.
-
-``as_p()``
-----------
-
-.. method:: Form.as_p()
-
-``as_p()`` renders the form using the template assigned to the forms
-``template_name_p`` attribute, by default this template is
-``'django/forms/p.html'``. This template renders the form as a series of
-```` tags, with each ``
`` containing one field::
-
- >>> f = ContactForm()
- >>> f.as_p()
- '
Subject:
\nMessage:
\nSender:
\nCc myself:
'
- >>> print(f.as_p())
- Subject:
- Message:
- Sender:
- Cc myself:
-
-``as_ul()``
------------
-
-.. method:: Form.as_ul()
-
-``as_ul()`` renders the form using the template assigned to the forms
-``template_name_ul`` attribute, by default this template is
-``'django/forms/ul.html'``. This template renders the form as a series of
-```` tags, with each `` `` containing one field. It does *not* include
-the ````, so that you can specify any HTML attributes on the
-```` for flexibility::
-
- >>> f = ContactForm()
- >>> f.as_ul()
- 'Subject: \nMessage: \nSender: \nCc myself: '
- >>> print(f.as_ul())
- Subject:
- Message:
- Sender:
- Cc myself:
-
-``as_table()``
---------------
-
-.. method:: Form.as_table()
-
-Finally, ``as_table()`` renders the form using the template assigned to the
-forms ``template_name_table`` attribute, by default this template is
-``'django/forms/table.html'``. This template outputs the form as an HTML
-````::
-
- >>> f = ContactForm()
- >>> f.as_table()
- 'Subject: \nMessage: \nSender: \nCc myself: '
- >>> print(f)
- Subject:
- Message:
- Sender:
- Cc myself:
-
-``get_context()``
------------------
-
-.. versionadded:: 4.0
-
-.. method:: Form.get_context()
-
-Return context for form rendering in a template.
-
-The available context is:
-
-* ``form``: The bound form.
-* ``fields``: All bound fields, except the hidden fields.
-* ``hidden_fields``: All hidden bound fields.
-* ``errors``: All non field related or hidden field related form errors.
-
``render()``
-------------
+~~~~~~~~~~~~
.. versionadded:: 4.0
@@ -642,6 +561,115 @@ All arguments are optional and default to:
* ``context``: Value returned by :meth:`.Form.get_context`
* ``renderer``: Value returned by :attr:`.Form.default_renderer`
+By passing ``template_name`` you can customize the template used for just a
+single call.
+
+``get_context()``
+~~~~~~~~~~~~~~~~~
+
+.. versionadded:: 4.0
+
+.. method:: Form.get_context()
+
+Return the template context for rendering the form.
+
+The available context is:
+
+* ``form``: The bound form.
+* ``fields``: All bound fields, except the hidden fields.
+* ``hidden_fields``: All hidden bound fields.
+* ``errors``: All non field related or hidden field related form errors.
+
+``template_name_label``
+~~~~~~~~~~~~~~~~~~~~~~~
+
+.. versionadded:: 4.0
+
+.. attribute:: Form.template_name_label
+
+The template used to render a field's ````, used when calling
+:meth:`BoundField.label_tag`/:meth:`~BoundField.legend_tag`. Can be changed per
+form by overriding this attribute or more generally by overriding the default
+template, see also :ref:`overriding-built-in-form-templates`.
+
+Output styles
+-------------
+
+As well as rendering the form directly, such as in a template with
+``{{ form }}``, the following helper functions serve as a proxy to
+:meth:`Form.render` passing a particular ``template_name`` value.
+
+These helpers are most useful in a template, where you need to override the
+form renderer or form provided value but cannot pass the additional parameter
+to :meth:`~Form.render`. For example, you can render a form as an unordered
+list using ``{{ form.as_ul }}``.
+
+Each helper pairs a form method with an attribute giving the appropriate
+template name.
+
+``as_p()``
+~~~~~~~~~~
+
+.. attribute:: Form.template_name_p
+
+The template used by ``as_p()``. Default: ``'django/forms/p.html'``.
+
+.. method:: Form.as_p()
+
+``as_p()`` renders the form as a series of ```` tags, with each ``
``
+containing one field::
+
+ >>> f = ContactForm()
+ >>> f.as_p()
+ '
Subject:
\nMessage:
\nSender:
\nCc myself:
'
+ >>> print(f.as_p())
+ Subject:
+ Message:
+ Sender:
+ Cc myself:
+
+``as_ul()``
+~~~~~~~~~~~
+
+.. attribute:: Form.template_name_ul
+
+The template used by ``as_ul()``. Default: ``'django/forms/ul.html'``.
+
+.. method:: Form.as_ul()
+
+``as_ul()`` renders the form as a series of ```` tags, with each `` ``
+containing one field. It does *not* include the ````, so that
+you can specify any HTML attributes on the ``