2015-04-02 14 views
6

Zaktualizowałem do nowej wersji Django 1.8 i zacząłem używać Jinja2, ponieważ powiedział, że jest teraz obsługiwane, a Jinja2 ma kilka funkcji, których mógłbym użyć w moim projekcie.Django 1.8 z Jinja2: Contrib app Administrator nie działa

Po zakończeniu dostosowywania szablonów do mojej aplikacji do wersji Jinja2 i skorzystaniu z nowych dostępnych funkcji, odkryłem, że aplikacja Admin contrib już nie działa.

"TemplateDoesNotExist w/admin/login /"

Tak więc okazuje się, że aplikacja contrib Admin dopiero wykonane szablony dla DjangoTemplates a nie dla Jinja2. Najpierw zrobiłem naiwną rzecz i utworzyłem dowiązanie symboliczne w [...]/site-packages/django/contrib/admin od templates do jinja2, ale szablony używały szczegółów DjangoTemplates, więc Jinja2 ich nie akceptuje. Usunąłem dowiązanie symboliczne.

Sposób, w jaki zostały przełączone do Jinja2 jest poprzez następującą zmianę w moim projekcie settings.py:

TEMPLATES = [ 
    { 
-  'BACKEND': 'django.template.backends.django.DjangoTemplates', 
+  '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', 
-   ], 
-  }, 
    }, 
] 

Czy ktoś wie albo:

  1. Jak niech contrib aplikacja Admin zachować używanie DjangoTemplates przy jednoczesnym zezwoleniu mojej aplikacji na użycie aplikacji Jinja2 lub
  2. Jeśli istnieje inna aplikacja administracyjna równie dobra, jak domyślna, która obsługuje Jinja2, lub
  3. Jeśli jest coś jeszcze, co przeoczyłem, lub powinienem być tego świadomy?

Dziękuję za poświęcony czas :)

Odpowiedz

6

Aplikacja admin nie pochodzą z szablonami Jinja2. Musisz skonfigurować swój projekt, aby korzystać z szablonów Django i Jinja2.

Poniższy przykład ma postać Django template docs.

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [ 
      '/home/html/example.com', 
      '/home/html/default', 
     ], 
    }, 
    { 
     'BACKEND': 'django.template.backends.jinja2.Jinja2', 
     'DIRS': [ 
      '/home/html/jinja2', 
     ], 
    }, 
] 
+4

Podążyłem za twoją sugestią i działało ładnie. Rzeczą, którą zrobiłem inaczej było umieszczenie Jinja2 przed DjangoTemplates zamiast po, ponieważ w normalnej operacji, jest to silnik szablonu, który będzie najczęściej poprawny, a także zamiast dostarczać DIRS, jak w twoim przykładzie, zostawiłem je na swoich domyślnych (puste listy) i zawiera kilka innych ustawień domyślnych. –