Трудность переопределения шаблона администратора Django
Я использую Django 1.2.4 на Ubuntu 10.10. Я пытаюсь переопределить шаблон index.html для модуля admin. Я слежу за этими инструкциями . Я также посмотрел на question, но у меня все еще есть трудности.
В инструкциях говорится создать каталог admin
в каталоге шаблонов:
templates/
admin/
index.html
Я хочу переопределить один блок в index.html
. (Действительно, все, что я хочу сделать, это добавить текст в конец. Есть ли более простой способ, чем копировать/вставлять весь блок и изменять его?) ( Обновление: Похоже, {{block.super}}
может помочь.)
Чтобы сигнализировать, что я переопределяю, я помещаю это в начало моего index.html
:
{% extends "admin/index.html" %}
Конечно, это приводит к переполнению стека (из терминала):
Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.RuntimeError'> ignored
Каков правильный способ сделать это? Я попробовал символическую ссылку для ответа на связанный вопрос, но это привело к следующему:
[email protected]:~/foo$ sudo ln -s /usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/ django_admin
[sudo] password for me:
ln: creating symbolic link `django_admin': Protocol error
Что я делаю неправильно?
Ответы
Ответ 1
Ошибка рекурсии заключается в том, что вы сами расширяете admin/index.html
.
Вы можете:
- скопируйте весь шаблон
admin/index.html
в каталог templates/admin/
, и он заменит шаблон по умолчанию вашими
- переопределить
index.html
для каждого приложения или модели, как описано здесь
Я знаю, что это уже поздно после вопроса, но вы знаете, google travel...
Ответ 2
Измените settings.py с дополнительной папкой шаблона, например:
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
"/home/mysite/webapps/django/myproject/templates",
"/home/mysite/webapps/django/lib/python2.7/django/", # extra folder
)
Затем в myproject/templates/admin добавьте свой собственный index.html, например:
{% extends "contrib/admin/templates/admin/index.html" %}
{% block branding %}
<h1 id="site-name">Administration for TheLittleButtonCo</h1>
{% endblock %}
Вариации возможны, очевидно. Это работает над окончанием Django 1.3.1
Ответ 3
Не уверен, что вы нашли ответ, но вам нужно изменить
{% extends "admin/index.html" %}
к
{% extends "admin/base_site.html" %}
так как перезаписывается исходная страница index.html. Поскольку система Django выполняет поиск в вашей папке шаблонов, прежде чем использовать администратор по умолчанию, так что в этом случае он найдет файл admin/index.html в ваших шаблонах, а затем попытается распространить его на расширение (следовательно, ошибка рекурсии).
Для справки вы можете настроить base_site.html
в своих шаблонах, он расширяет base.html
. Лучше всего сделать копию оригинала:
/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/
и вставьте его в папку шаблонов в качестве отправной точки
Ответ 4
Я использую дополнительный пакет, называемый django-smart-extends