Fixed #29226 -- Doc'd modify_settings() ordering considerations for Python < 3.6.

This commit is contained in:
Benjamin Bach 2018-04-01 12:06:56 +02:00 committed by Tim Graham
parent 83b04d4f88
commit 08f788b169
1 changed files with 17 additions and 0 deletions

View File

@ -1277,6 +1277,23 @@ The decorator can also be applied to test case classes::
decorator. For a given class, :func:`~django.test.modify_settings` is decorator. For a given class, :func:`~django.test.modify_settings` is
always applied after :func:`~django.test.override_settings`. always applied after :func:`~django.test.override_settings`.
.. admonition:: Considerations with Python 3.5
If using Python 3.5 (or older, if using an older version of Django), avoid
mixing ``remove`` with ``append`` and ``prepend`` in
:func:`~django.test.modify_settings`. In some cases it matters whether a
value is first added and then removed or vice versa, and dictionary key
order isn't preserved until Python 3.6. Instead, apply the decorator twice
to guarantee the order of operations. For example, to ensure that
``SessionMiddleware`` appears first in ``MIDDLEWARE``::
@modify_settings(MIDDLEWARE={
'remove': ['django.contrib.sessions.middleware.SessionMiddleware'],
)
@modify_settings(MIDDLEWARE={
'prepend': ['django.contrib.sessions.middleware.SessionMiddleware'],
})
.. warning:: .. warning::
The settings file contains some settings that are only consulted during The settings file contains some settings that are only consulted during