web-dev-qa-db-fra.com

Django: erreur "Aucun module nommé context_processors" après le redémarrage

J'ai un site Django qui fonctionne sur mon PC et fonctionnait brièvement sur mon serveur après l'avoir chargé. J'ai remarqué que mon serveur avait Django 1.6 et je mis à niveau vers 1.8.

Après le redémarrage, aucune des pages de mon site ne se charge et j'obtiens l'erreur:

ImportError Aucun module nommé context_processors

J'ai lu les documents sur Django et allauth. Django mentionne qu'en 1.8 les context_processors se sont déplacés et allauth dit que des balises allauth spécifiques ne sont plus nécessaires dans le TEMPLATE_CONTEXT_PROCESSORS de settings.py.

Django: https://docs.djangoproject.com/en/1.8/ref/settings/

Allauth: https://Django-allauth.readthedocs.org/en/latest/installation.html

Quelqu'un d'autre a rencontré ça? Suis-je sur la bonne voie? Dois-je changer quelque chose dans les paramètres? Je ne peux pas vraiment dire si c'est un problème Django ou allauth donc je ne sais pas par où commencer.

Toute aide est appréciée!

Traceback:

Django Version: 1.8.4
Python Version: 2.7.6
Installed Applications:
('Django.contrib.admin',
 'Django.contrib.auth',
 'Django.contrib.contenttypes',
 'Django.contrib.sessions',
 'Django.contrib.messages',
 'Django.contrib.staticfiles',
 'plant',
 'journal',
 'userimg',
 'Django.contrib.sites',
 'allauth',
 'allauth.account')
Installed Middleware:
('Django.contrib.sessions.middleware.SessionMiddleware',
 'Django.middleware.common.CommonMiddleware',
 'Django.middleware.csrf.CsrfViewMiddleware',
 'Django.contrib.auth.middleware.AuthenticationMiddleware',
 'Django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'Django.contrib.messages.middleware.MessageMiddleware',
 'Django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/Django/django_project/plant/views.py" in plant_main
  24.     return render(request, 'plant/plant_main.html', context)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/shortcuts.py" in render
  67.             template_name, context, request=request, using=using)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/template/loader.py" in render_to_string
  99.         return template.render(context, request)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/template/backends/Django.py" in render
  74.         return self.template.render(context)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/template/base.py" in render
  208.                 with context.bind_template(self):
File "/usr/lib/python2.7/contextlib.py" in __enter__
  17.             return self.gen.next()
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/template/context.py" in bind_template
  237.         processors = (template.engine.template_context_processors +
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/utils/functional.py" in __get__
  60.         res = instance.__dict__[self.name] = self.func(instance)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/template/engine.py" in template_context_processors
  90.         return Tuple(import_string(path) for path in context_processors)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/template/engine.py" in <genexpr>
  90.         return Tuple(import_string(path) for path in context_processors)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.4-py2.7.Egg/Django/utils/module_loading.py" in import_string
  26.     module = import_module(module_path)
File "/usr/lib/python2.7/importlib/__init__.py" in import_module
  37.     __import__(name)

Exception Type: ImportError at /plant/
Exception Value: No module named context_processors
26
Chris May

Le problème était que je n'avais aucun paramètre TEMPLATES dans settings.py comme requis après la mise à niveau vers Django 1.8. Je ne sais pas vraiment pourquoi cela fonctionnait sur mon PC en utilisant le Django.

À partir des documents allauth, j'ai collé cela dans mon fichier de paramètres:

TEMPLATES = [
    {
        'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Already defined Django-related contexts here

                # `allauth` needs this from Django
                'Django.template.context_processors.request',
            ],
        },
    },
]

Et copié le contenu de mon ancien TEMPLATE_DIRS définition dans la définition DIRS des MODÈLES. Le résultat final ressemble à ceci:

TEMPLATES = [
    {
        'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Already defined Django-related contexts here

                # `allauth` needs this from Django
                'Django.template.context_processors.request',
            ],
        },
    },
]

Selon la documentation d'une récente mise à jour allauth, context_processors doit maintenant être spécifié dans le paramètre TEMPLATES et non TEMPLATE_CONTEXT_PROCESSORS réglage.

Merci à Joey Wilhelm de m'avoir indiqué dans la bonne direction à ce sujet.

13
Chris May

J'ai rencontré le même problème mais je passe de 1.9.1 à 1.10. J'ai trouvé qu'il y avait une petite différence dans les paramètres.

Ceci est le code de 1.9.1

TEMPLATES = [
{
    'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'Django.template.context_processors.debug',
            'Django.template.context_processors.request',
            'Django.core.context_processors.request',
            'Django.contrib.auth.context_processors.auth',
            'Django.contrib.messages.context_processors.messages',
        ],
    },
},
]

Ceci est le code pour 1.10

TEMPLATES = [
{
    'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'Django.template.context_processors.debug',
            'Django.template.context_processors.request',
            'Django.contrib.auth.context_processors.auth',
            'Django.contrib.messages.context_processors.messages',
        ],
    },
},
]

La ligne Django.core.context_processors.request n'est pas valide en 1.10. Supprimez-le et le code fonctionne bien.

52
mark

Juste un conseil: lorsqu'un retraçage ne vous fournit pas les informations dont vous avez besoin pour identifier la ligne de code exacte; Il peut être utile d'activer le mode DEBUG et d'ouvrir la page dans le navigateur. Il y a ce merveilleux petit local_vars élément, où vous pouvez voir l'état de la variable locale lorsque le retraçage se produit. Cela peut être super pratique!

(Dans mon cas, c'était lié à des changements dans allauth)

2
Aaron

Dans mon cas, j'ai dû supprimer la ligne suivante dans settings.py:

            'Django.core.context_processors.csrf',

J'ai redémarré le serveur et je n'ai plus vu cette erreur par la suite.

1
ndarriulat

Maintenant, c'est la source mise à jour: https://docs.djangoproject.com/en/1.11/ref/templates/upgrading/

TEMPLATES = [
    {
        'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
        'DIRS': [
            # insert your TEMPLATE_DIRS here
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
                # list if you haven't customized them:
                'Django.contrib.auth.context_processors.auth',
                'Django.template.context_processors.debug',
                'Django.template.context_processors.i18n',
                'Django.template.context_processors.media',
                'Django.template.context_processors.static',
                'Django.template.context_processors.tz',
                'Django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
0
Pradeep Kumar Nalluri