2013-07-31 11 views
9

Wygląda na to, że powinno być proste, ale muszę zrobić coś złego. Rozszerzyłem szablony administracyjne dla poszczególnych aplikacji wcześniej, ale po raz pierwszy próbowałem rozszerzyć, aby zmodyfikować coś na całej tablicy.Jak poprawnie rozszerzyć szablon django admin/base.html?

Chcę zmienić kolor tekstu pomocy dla całego administratora, dlatego chcę rozszerzyć blok ekstrastyle szablonu base.html.

Więc moim głównym folderze szablonów stworzyłem admin/base.html z tego kodu w niej:

{% extends 'admin/base.html' %} 

{% block extrastyle %} 
    {# Changing the color of the help text across the entire admin #} 
    <style> 
     .help, p.help { 
      font-size: 10px !important; 
      color: #f00; 
     } 
    </style> 
{% endblock %} 

Teraz, gdy próbuję i dostęp do admina, serwer całkowicie zawiesza z „bus 10” błąd. Uważam, że dzieje się tak dlatego, że próbuje się rozszerzyć. Ponieważ Django patrzy najpierw w moje foldery szablonów aplikacji, {% rozszerzenia 'admin/base.html'%} znajduje się na pierwszym miejscu, a świat eksploduje.

Jednak, jeśli spróbuję umieścić podstawowy html w innym miejscu, to nie działa. Jeśli umieścisz go w jednej z moich aplikacji, działa tylko w tej aplikacji, ale jeśli umieści go w innym miejscu, zostanie zignorowany.

Z mojego punktu widzenia najlepszą praktyką jest rozszerzanie zamiast zastępowania szablonów django, więc chciałbym, aby to działało. Jednak jeśli jedynym sposobem, w jaki mogę to zrobić, jest przesłonięcie go, to jest to droga jaką weźmiemy.

Odpowiedz

17

Rzeczywiście, twój problem to nieskończona pętla rekurencji, ponieważ base.html rozszerza się.

Aby osiągnąć to, co chcesz, powinieneś przesłanianie admin/base_site.html zamiast (który z kolei rozciąga base.html). W ten sposób możesz zastąpić tylko te bloki, które cię interesują.

+0

Ach, tego właśnie szukałem. Dziękuję Ci! –