2015-09-28 9 views
20

Ich habe eine Django-Site, die auf meinem PC funktioniert, und funktionierte kurz nach dem Laden auf meinem Server. Ich bemerkte, dass mein Server Django 1.6 hatte und ich auf 1.8 aufgerüstet habe.Django: "Kein Modul namens context_processors" Fehler nach Neustart

Nach dem Neustart keine der Seiten auf meiner Website laden und ich erhalten die Fehlermeldung:

ImportError No module named context_processors

ich durch die docs auf Django und allauth lesen. Django erwähnt, dass in 1.8 die context_processors verschoben wurden und allauth sagt, dass spezifische allauth-Tags in TEMPLATE_CONTEXT_PROCESSORS of settings.py nicht mehr benötigt werden.

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

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

Wer sonst laufen in das? Bin ich auf dem richtigen Weg? Muss ich etwas in den Einstellungen ändern? Ich kann nicht wirklich sagen, ob es ein Django- oder Allauth-Thema ist, also bin ich mir nicht sicher, wo ich anfangen soll.

Jede Hilfe wird geschätzt!

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 
+1

Können Sie die vollständige Rückverfolgung für Ihre Fehler posten? Das wird ein hilfreicher Ausgangspunkt sein. –

+0

Nur aktualisiert. Ich wollte es das erste Mal tun. Das tut mir leid. –

+0

Haben Sie in Ihrer TEMPLATES-Einstellung etwas für 'context_processors'? Wie es aussieht, haben Sie möglicherweise eine App aufgelistet, die keine Kontext-Prozessoren enthält. –

Antwort

10

Das Problem war, dass ich keine VORLAGEN Einstellung in settings.py nach der Aktualisierung nach Bedarf hatte 1,8 bis Django. Mir ist nicht wirklich klar, warum es auf meinem PC mit dem Django-Server funktionierte.

Aus den allauth docs, klebte ich diese in meine Einstellungsdatei:

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', 
      ], 
     }, 
    }, 
] 

und kopiert den Inhalt meiner alten TEMPLATE_DIRS in die DIRS Definition Einstellung für Vorlagen. Das Endergebnis sieht wie folgt aus:

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', 
      ], 
     }, 
    }, 
] 

Gemäß der Dokumentation für eine aktuelle allauth Update context_processors jetzt in der VORLAGEN Einstellung und nicht TEMPLATE_CONTEXT_PROCESSORS Einstellung angegeben werden müssen.

Dank Joey Wilhelm für mich in die richtige Richtung auf diesem.

+2

Ah gut. Ich habe mich gefragt, ob das der Fall sein könnte. Django 1.8 führte mehrere Datenbank-Backends ein und verwendet daher neue Einstellungen. Sie können die Versionshinweise überprüfen, um sicherzustellen, dass keine weiteren wichtigen Änderungen für die Aktualisierung erforderlich sind. Außerdem sollten Sie zwei gute Befehle ausführen: 'manage.py check' und' manage.py diffsettings'. –

+0

Guter Tipp. Vielen Dank. –

+0

** Ich bin nicht wirklich klar, warum es auf meinem PC funktionierte ... ** Vielleicht haben Sie nach dem Upgrade die * .pyc-Dateien nicht gelöscht. Natürlich ist das eine Frage, auf die ich keine Antwort erwarte. Es ist nur zum Nachdenken;) –

39

Ich habe das gleiche Problem, aber ich bin von 1.9.1 auf 1.10 aktualisiert. Ich fand, dass es einen kleinen Unterschied in den Einstellungen gibt.

Dies ist der Code von 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', 
     ], 
    }, 
}, 
] 

für 1.10 Dieser Code ist

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', 
     ], 
    }, 
}, 
] 

Die Linie django.core.context_processors.request in 1.10 nicht gültig ist. Entfernen Sie es und der Code funktioniert gut.

+18

Ich denke, Sie sollten 'django.core.context_processors' in' django.template.context_processors' ändern. Siehe [Dokumente] (https://docs.djangoproject.com/en/1.10/releases/1.8/#django-core-context-processors). Nur durch das Entfernen der Linie, wie die Markierung vorschlägt, würde Sie ohne Anforderung im Zusammenhang verlassen. Danke trotzdem, seit du mich in die richtige Richtung gebracht hast! – Jeewes

+0

@Jeewes Ja, Core wurde in Template geändert, das war das Problem für mich, die Dokumente immer zu lesen, um Sie auf dem Laufenden zu halten, ist entscheidend und traurig lol –

+0

Worauf bezieht sich BASE_DIR? Vielen Dank. –

1

Nur ein Tipp: Wenn ein Traceback Sie nicht mit den Informationen versorgt, die Sie benötigen, um die genaue Codezeile zu identifizieren; Es kann hilfreich sein, den Modus DEBUG zu aktivieren und die Seite im Browser zu öffnen. Es gibt dieses wunderbare kleine local_vars Element, in dem Sie den lokalen Variablenstatus sehen können, wenn das Traceback auftritt. Es kann super praktisch sein!

(In meinem Fall war es zu Veränderungen innerhalb allauth bezogen)