Пользовательские шаблоны admin django не работают

Я пытаюсь получить пользовательские шаблоны для страницы администратора для Django, но не увенчался успехом. Я прочитал документацию django и несколько блогов, которые объясняют это как простой шаг, который, как я предполагал, был.

Как сейчас, страница администратора работает, но моя собственная переработка CSS или шаблонов не работает. Моя настройка выглядит следующим образом

/project_folder/
      manage.py
      settings.py
      urls.py
      __init__.py
      /app/
          views.py
          models.py
          __init__.py
          /templates/
                /admin/
                    base_site.html

В urls.py у меня есть

(r'^admin/', include(admin.site.urls)),

Работает с тех пор, как я не могу войти в систему и т.д. Поэтому я предполагаю, что /admin/base _site.html перезапишет файл по умолчанию, но он ничего не делает.

Кто-нибудь знает, что здесь происходит? Я последовал за ним из учебников/гидов Django и пошел в некоторые блоги, чтобы узнать, есть ли у них ответы, но все они сказали то же самое.

Изменить 1: У меня правильно настроена настройка шаблонов.

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates/'),
)

Это работает правильно, так как у меня остался весь мой сайт, работающий с медиа-каталогом для CSS и т.д. Единственное, что не кажется "принимающим" шаблоны, - это раздел администратора.

Ответы

Ответ 1

Хорошо, я исправил это, это была глупая ошибка, но я уже играл с этим последние 2 часа. Я должен был объявить свое приложение до django.contrib.admin. В противном случае это не принимается.

Ответ 2

Еще одна ошибка, которую нужно устоять перед этим упражнением. Упражнение говорит, чтобы изменить это...

<h1 id="site-name"><a href="{% url 'admin:index' %}"> {{ site_header|default:_('Django administration') }} </a></h1>

к этому...

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>

Возникает соблазн изменить константу строки, но это неверно. То есть НЕ делайте этого, он не изменит заголовок:

<h1 id="site-name"><a href="{% url 'admin:index' %}"> {{ site_header|default:_('Polls Administration') }} </a></h1>

Это была ошибка, которую я совершил, и мне пришлось тщательно проделать это упражнение, чтобы исправить это.

Ответ 3

Я не мог распознать шаблон администратора при выполнении этого шага во второй части учебника Django.

Вот как я это решил:

Используя информацию в этом ответе, я напечатал значение TEMPLATE_DIRS:

  • В командной строке перейдите в каталог, в котором существует файл проекта settings.py (для меня это R:\jeffy\programming\sandbox\python\django\tutorial\mysite\mysite\)
  • Запустите интерактивную оболочку: python
  • >>> import settings
  • >>> settings.TEMPLATE_DIRS, который выводит ['R:\\jeffy\\programming\\sandbox\\python\\django\\tutorial\\mysite\\templates']

Итак, это ожидаемое местоположение каталога шаблонов для этого проекта. В это входит каталог admin, и файл base_site.html переходит в это.

Другая проблема, с которой я столкнулся, заключалась в том, что она работает, но я только изменил поле <TITLE>, поэтому я просто этого не заметил. (Я думал, что меняю основной заголовок.)

Ответ 4

Убедитесь, что вы установите TEMPLATE_DIRS в settings.py в правильную папку!

Ответ 5

У меня была такая же проблема, проходя через учебник Django 1.6.5 (https://docs.djangoproject.com/en/1.8/intro/tutorial02/), но понял, что это ошибка в нечитании внимательно. В этом уроке вы поместите это в свои settings.py:

TEMPLATES = [
  {  
      ...
     'DIRS': [os.path.join(BASE_DIR, 'templates')],
      ...
  }

Затем я помещал папку шаблонов, которую я хотел бы поставить переопределить для сайта администратора в приложении, как и в вашем примере:

/project_folder/
      manage.py
      settings.py
      urls.py
      __init__.py
      /app/
          views.py
          models.py
          __init__.py
          /templates/
                /admin/
                    base_site.html

С этим это не сработало бы по той причине, что было похоже на вопрос, который вы отметили Даниэлем Роземэном в одном из комментариев, мой DIR оценивал project_folder/templates (как я сказал). Затем я заметил, что в учебнике явным образом сказал, что папка templates/admin находится на уровне проекта, а не на уровне приложения:

Создайте каталог шаблонов в каталоге проектов (тот, который содержит manage.py). Шаблоны могут жить в любой файловой системе, доступной Django. (Django работает как любой пользователь, который запускает ваш сервер.) Тем не менее, сохранение ваших шаблонов в проекте является хорошим соглашением.

Сделав это, я имел следующую структуру:

/project_folder/
      manage.py
      settings.py
      urls.py
      __init__.py 
      /templates/
          /admin/
              base_site.html
      /app/
          views.py
          models.py
          __init__.py

С этим все работало, как ожидалось (я мог бы перезаписать стандартные шаблоны django для страниц администратора).

В то время как вы можете разместить шаблоны где угодно и настроить Django, чтобы найти их, кажется, имеет смысл разместить ваши основные шаблоны администратора на уровне проекта, поскольку админ-сайт не является специфичным для приложения, но доступен для всего проекта.