[1.11.x] Fixed #26817 -- Doc'd downsides and alternatives to Jinja2 context processors.

Thanks Aymeric Augustin and Carl Meyer.

Backport of dacdcec767 from master
This commit is contained in:
Tim Graham 2017-03-06 13:34:48 -05:00
parent 6392bf26ca
commit 4852276aba
1 changed files with 26 additions and 0 deletions

View File

@ -419,6 +419,32 @@ adds defaults that differ from Jinja2's for a few options:
It defaults to an empty list.
.. admonition:: Using context processors with Jinja2 templates is discouraged.
Context processors are useful with Django templates because Django templates
don't support calling functions with arguments. Since Jinja2 doesn't have
that limitation, it's recommended to put the function that you would use as a
context processor in the global variables available to the template using
``jinja2.Environment`` as described below. You can then call that function in
the template:
.. code-block:: jinja
{{ function(request) }}
Some Django templates context processors return a fixed value. For Jinja2
templates, this layer of indirection isn't necessary since you can add
constants directly in ``jinja2.Environment``.
The original use case for adding context processors for Jinja2 involved:
* Making an expensive computation that depends on the request.
* Needing the result in every template.
* Using the result multiple times in each template.
Unless all of these conditions are met, passing a function to the template is
simpler and more in line with the design of Jinja2.
.. versionadded:: 1.11
The ``'context_processors'`` option was added.