Commit 24620d71 authored by Daniel Roseman's avatar Daniel Roseman Committed by Tim Graham
Browse files

Fixed #25079 -- Added warning if both TEMPLATES and TEMPLATE_* settings are defined.

Django ignores the value of the TEMPLATE_* settings if TEMPLATES is also
set, which is confusing for users following older tutorials. This change
adds a system check that warns if any of the TEMPLATE_* settings have
changed from their defaults but the TEMPLATES dict is also non-empty.

Removed the TEMPLATE_DIRS from the test settings file; this was marked
for removal in 1.10 but no tests fail if it is removed now.
parent b49e3ab9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ from .messages import (
from .registry import Tags, register, run_checks, tag_exists

# Import these to force registration of checks
import django.core.checks.compatibility.django_1_8_0  # NOQA isort:skip
import django.core.checks.model_checks  # NOQA isort:skip
import django.core.checks.security.base  # NOQA isort:skip
import django.core.checks.security.csrf  # NOQA isort:skip
+0 −0

Empty file added.

+31 −0
Original line number Diff line number Diff line
from __future__ import unicode_literals

from django.conf import global_settings, settings

from .. import Tags, Warning, register


@register(Tags.compatibility)
def check_duplicate_template_settings(app_configs, **kwargs):
    if settings.TEMPLATES:
        values = [
            'TEMPLATE_DIRS',
            'ALLOWED_INCLUDE_ROOTS',
            'TEMPLATE_CONTEXT_PROCESSORS',
            'TEMPLATE_DEBUG',
            'TEMPLATE_LOADERS',
            'TEMPLATE_STRING_IF_INVALID',
        ]
        duplicates = [
            value for value in values
            if getattr(settings, value) != getattr(global_settings, value)
        ]
        if duplicates:
            return [Warning(
                "The standalone TEMPLATE_* settings were deprecated in Django "
                "1.8 and the TEMPLATES dictionary takes precedence. You must "
                "put the values of the following settings into your default "
                "TEMPLATES dict: %s." % ", ".join(duplicates),
                id='1_8.W001',
            )]
    return []
+6 −0
Original line number Diff line number Diff line
@@ -186,6 +186,12 @@ that might occur as a result of a version upgrade.
  ``django.contrib.messages.middleware.MessageMiddleware`` were removed from
  the defaults. If your project needs these middleware then you should
  configure this setting. *This check was removed in Django 1.9*.
* **1_8.W001**: The standalone ``TEMPLATE_*`` settings were deprecated in
  Django 1.8 and the :setting:`TEMPLATES` dictionary takes precedence. You must
  put the values of the following settings into your defaults ``TEMPLATES``
  dict: :setting:`TEMPLATE_DIRS`, :setting:`ALLOWED_INCLUDE_ROOTS`,
  :setting:`TEMPLATE_CONTEXT_PROCESSORS`, :setting:`TEMPLATE_DEBUG`,
  :setting:`TEMPLATE_LOADERS`, :setting:`TEMPLATE_STRING_IF_INVALID`.

Admin
-----
+3 −0
Original line number Diff line number Diff line
@@ -11,3 +11,6 @@ Bugfixes

* Added the ability to serialize values from the newly added
  :class:`~django.db.models.UUIDField` (:ticket:`25019`).

* Added a system check warning if the old ``TEMPLATE_*`` settings are defined
  in addition to the new ``TEMPLATES`` setting.
Loading