2016-06-08 9 views
2

Ich habe Django 1.9.7 installiert, und ich habe Pythons 3.4.3 und 2.7.10 auf Ubuntu.Kann Jinja2 mit Django nicht einrichten

Dies sind die Schritte, die ich befolgt haben:

  1. Hergestellt ein neues Projekt mit django-admin startproject testproject
  2. cd testproject/testproject
  3. eine App innerhalb des Projekts mit django-admin startapp testapp
  4. Hergestellt ein Verzeichnis für Vorlagen, dass App mit mkdir testapp/templates und fügte hinzu, eine sehr einfache index.html Vorlage dort
  5. Bearbeitet , um das Vorlagen-Backend in django.template.backends.jinja2.Jinja2 zu ändern, indem Zeile 57 der Standardeinstellungsdatei bearbeitet und testproject.testapp zu INSTALLED_APPS hinzugefügt wird; die TEMPLATES Abschnitt ist daher wie folgt aus:

    TEMPLATES = [ 
        { 
         'BACKEND': 'django.template.backends.jinja2.Jinja2', 
         'DIRS': [], 
         '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', 
          ], 
         }, 
        }, 
    ] 
    
  6. urls.py Edited, Hinzufügen from testproject.testapp import views und ein URL-Muster url(r'^$', views.index),

  7. Edited testapp/views.py Zugabe

    def index(request): 
        return render(request, 'index.html') 
    
  8. cd ..

  9. Ran den Server mit python3 manage.py runserver oder python manage.py runserver - sehr ähnliche Wirkung
  10. einen Browser nehmen zu http://localhost:3000

Ich erhalte eine Fehlermeldung. Auf der Kommandozeile bekomme ich diese:

Internal Server Error:/
Traceback (most recent call last): 
    File "/usr/local/lib/python3.4/dist-packages/django/template/utils.py", line 86, in __getitem__ 
    return self._engines[alias] 
KeyError: 'jinja2' 

durch eine andere Ausnahme, verursacht „während der oben genannten Ausnahmebehandlung“, die die Ausnahme übereinstimmt ich im Browser sehen:

Environment: 


Request Method: GET 
Request URL: http://localhost:3000/ 

Django Version: 1.9.7 
Python Version: 3.4.3 
Installed Applications: 
['django.contrib.staticfiles', 'testproject.testapp', 'webpack_loader'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/usr/local/lib/python3.4/dist-packages/django/template/utils.py" in __getitem__ 
    86.    return self._engines[alias] 

During handling of the above exception ('jinja2'), another exception occurred: 

File "/usr/local/lib/python3.4/dist-packages/django/core/handlers/base.py" in get_response 
    174.      response = self.process_exception_by_middleware(e, request) 

File "/usr/local/lib/python3.4/dist-packages/django/core/handlers/base.py" in get_response 
    172.      response = response.render() 

File "/usr/local/lib/python3.4/dist-packages/django/template/response.py" in render 
    160.    self.content = self.rendered_content 

File "/usr/local/lib/python3.4/dist-packages/django/template/response.py" in rendered_content 
    135.   template = self._resolve_template(self.template_name) 

File "/usr/local/lib/python3.4/dist-packages/django/template/response.py" in _resolve_template 
    90.   new_template = self.resolve_template(template) 

File "/usr/local/lib/python3.4/dist-packages/django/template/response.py" in resolve_template 
    80.    return select_template(template, using=self.using) 

File "/usr/local/lib/python3.4/dist-packages/django/template/loader.py" in select_template 
    55.  engines = _engine_list(using) 

File "/usr/local/lib/python3.4/dist-packages/django/template/loader.py" in _engine_list 
    143.  return engines.all() if using is None else [engines[using]] 

File "/usr/local/lib/python3.4/dist-packages/django/template/utils.py" in all 
    110.   return [self[alias] for alias in self] 

File "/usr/local/lib/python3.4/dist-packages/django/template/utils.py" in <listcomp> 
    110.   return [self[alias] for alias in self] 

File "/usr/local/lib/python3.4/dist-packages/django/template/utils.py" in __getitem__ 
    101.    engine = engine_cls(params) 

File "/usr/local/lib/python3.4/dist-packages/django/template/backends/jinja2.py" in __init__ 
    35.   self.env = environment_cls(**options) 

Exception Type: TypeError at/
Exception Value: __init__() got an unexpected keyword argument 'context_processors' 

ich sehr ähnlich erhalten Spuren mit Python 2.

I this question, die eine ähnliche Fehlermeldung hat gefunden (KeyError: 'jinja2') scheint aber ein anderes Problem, und this bug report zu sein, die den gleichen Fehler hat wieder deren Lösung jinja2 zu installieren, aber jinja2 ist definitiv installiert. Zumindest kann ich python oder python3 und dann import jinja2 ausführen. pip sagt, dass jinja2 aktuell ist.

Ich muss etwas Entscheidendes fehlen - irgendwelche Ideen?

+1

Es klingt, als ob Sie das Standard-Template-Backend von django zu jinja geändert haben - es wäre besser, Jinja als zusätzliches Backend hinzuzufügen (siehe [diese Antwort] (http://stackoverflow.com/questions/30701631/how- to-use-jinja2-als-templating-engine-in-django-1-8) Wenn Sie das Django-Template-Backend ersetzen, funktionieren Apps, die Django-Templates verwenden, nicht mehr, einschließlich des Admin. – Alasdair

+1

Auch , Django sucht nach Jinja Vorlagen in 'testapp/jinja2', nicht nach' testapp/templates' – Alasdair

+0

'mv testproject/testapp/templates testproject/testapp/jinja2' hat nichts geändert (ich denke es kommt nicht einmal so weit versuchen, die angegebene Vorlage zu finden), aber das ist nützlich zu wissen, danke. Ich Rollback dann die Vorlage Backend-Einstellungen auf Lager und fügte dann einen neuen Eintrag für Jinja2 wie Sie vorgeschlagen, aber die Optionen Schlüssel aus der verknüpften Antwort vollständig weggelassen (da ich noch nicht weiß, was Environment macht) und DIRS leer gelassen (da APP_DIRS tun wird, was ich will), und es funktioniert jetzt. Wenn du dies als Antwort schreibst, akzeptiere ich es. Vielen Dank! – tremby

Antwort

2

Der Fehler über context_processors ist, weil das Jinja2 Backend dieses Argument nicht unterstützt.

Sie sollten ein zusätzliches Back-End zu Ihrer TEMPLATES Einstellung hinzufügen, anstatt das vorhandene Back-End von Django zu jinja2 zu ersetzen. Weitere Informationen finden Sie unter this answer. Wenn Sie das vorhandene Back-End ersetzen, funktionieren Apps, die Django-Vorlagen erfordern, nicht, einschließlich des Administrators.

Schließlich sucht das jinja2-Backend nach Vorlagen in testapp/jinja2, nicht testapp/templates.