2015-09-28 11 views
20

Ho un sito Django che funziona sul mio PC e funzionava brevemente sul mio server dopo averlo caricato. Ho notato che il mio server aveva Django 1.6 e ho aggiornato a 1.8.Django: errore "Nessun modulo denominato context_processors" dopo il riavvio

Dopo il riavvio, nessuna delle pagine del mio sito di carico e ottengo l'errore:

ImportError No module named context_processors

ho letto la documentazione su Django e allauth. Django menziona che in 1.8 i context_processor si sono mossi e allauth dice che i tag allauth specifici non sono più necessari nello TEMPLATE_CONTEXT_PROCESSORS di settings.py.

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

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

Chiunque altro eseguito in questo? Sono sulla buona strada? Devo cambiare qualcosa nelle impostazioni? Non posso davvero dire se si tratta di un problema di Django o di allauth, quindi non so da dove cominciare.

Qualsiasi aiuto è apprezzato!

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

Puoi pubblicare il traceback completo per il tuo errore? Questo sarà un punto di partenza più utile. –

+0

Appena aggiornato. Volevo farlo la prima volta. Mi dispiace per quello –

+0

Avete qualcosa impostato nella vostra impostazione TEMPLATES per 'context_processors'? Dal suo aspetto, è possibile che in essa sia presente un'app che in realtà non contiene processori di contesto. –

risposta

10

Il problema era che non avevo alcuna impostazione modelli in settings.py come richiesto dopo l'aggiornamento a Django 1.8. Non sono davvero chiaro perché stava lavorando al mio PC usando il server Django.

Dalla documentazione allauth, ho incollato questo nel mio file di impostazioni:

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

E copiato il contenuto del mio vecchio TEMPLATE_DIRS impostazione nella definizione DIRS per i modelli. Il risultato finale è simile al seguente:

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

Secondo la documentazione per un recente aggiornamento allauth, context_processors ora devono essere specificato nell'impostazione MODELLI e non TEMPLATE_CONTEXT_PROCESSORS impostazione.

Grazie a Joey Wilhelm per avermi indicato nella giusta direzione.

+2

Ah bene. Mi stavo chiedendo se potesse essere così. Django 1.8 ha introdotto più database backend, quindi usa nuove impostazioni. Puoi controllare le note di rilascio per assicurarti che non vi siano altre importanti modifiche da aggiornare. Inoltre, due buoni comandi che potresti voler eseguire: 'manage.py check' e' manage.py diffsettings'. –

+0

Buon consiglio. Grazie. –

+0

** Non so bene perché funzionasse sul mio PC ... ** Forse dopo l'aggiornamento non hai cancellato i file * .pyc ?. Ovviamente questa è una domanda che non mi aspetto una risposta. È solo per pensarci;) –

39

Ho riscontrato lo stesso problema ma sto aggiornando da 1.9.1 a 1.10. Ho scoperto che c'è una piccola differenza nelle impostazioni.

Questo è il codice da 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', 
     ], 
    }, 
}, 
] 

Questo è il codice per 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 linea django.core.context_processors.request non è valido per 1.10. Rimuovilo e il codice funziona bene.

+18

Penso che dovresti cambiare 'django.core.context_processors' in' django.template.context_processors'. Vedi i [documenti] (https://docs.djangoproject.com/en/1.10/releases/1.8/#django-core-context-processors). Semplicemente rimuovendo la linea come suggerisce il marchio, ti lasceremmo senza richiesta nel contesto. Grazie comunque, visto che mi hai portato nella giusta direzione! – Jeewes

+0

@Jeewes Sì, il core è stato modificato in modello, questo è stato il problema per me, leggere i documenti ogni volta per tenerti aggiornato è cruciale e triste lol –

+0

A cosa si riferisce BASE_DIR? Grazie. –

1

Solo un suggerimento: quando un traceback non ti fornisce le informazioni necessarie per identificare la riga esatta del codice; Può essere utile abilitare la modalità DEBUG e aprire la pagina nel browser. C'è questo meraviglioso elemento local_vars, in cui è possibile vedere lo stato della variabile locale al momento del traceback. Può essere super utile!

(Nel mio caso, era correlato alle modifiche all'interno della verità)

Problemi correlati