Как переопределить шаблон администратора (например, admin / index.html), одновременно расширив его (см. Https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing -an-admin-template )?
Во-первых, я знаю, что этот вопрос уже задавался, и на него уже были даны ответы (см. Django: переопределение и расширение шаблона приложения ), но, как говорится в ответе, он не применим напрямую, если вы используете загрузчик шаблонов app_directories (который является большей частью время).
Мой текущий обходной путь состоит в том, чтобы делать копии и расширять их, вместо того, чтобы расширять непосредственно из шаблонов администратора. Это отлично работает, но действительно сбивает с толку и добавляет дополнительную работу при изменении шаблонов администратора.
Можно подумать о каком-то настраиваемом теге расширения для шаблонов, но я не хочу изобретать велосипед, если решение уже существует.
На заметку: кто-нибудь знает, будет ли эта проблема решена самим Django?
источник
Ответы:
Обновление :
Прочтите документацию для своей версии Django. например
https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#admin-overriding-templates https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#admin-overriding -templates
Оригинальный ответ от 2011 года:
У меня была такая же проблема около полутора лет назад, и я нашел на djangosnippets.org хороший загрузчик шаблонов, который упрощает эту задачу . Он позволяет расширять шаблон в конкретном приложении, давая вам возможность создать свой собственный admin / index.html, который расширяет шаблон admin / index.html из приложения администратора. Как это:
Я привел полный пример того, как использовать этот загрузчик шаблонов, в сообщении в блоге на моем веб-сайте.
источник
django-apptemplates
если он может перестать работать однажды.Что касается Django 1.8, являющегося текущим выпуском, нет необходимости создавать символические ссылки, копировать admin / templates в папку вашего проекта или устанавливать промежуточное ПО, как это предлагается в ответах выше. Вот что надо делать:
создать следующую древовидную структуру (рекомендуется официальной документацией )
Примечание . Местоположение этого файла не имеет значения. Вы можете поместить его в свое приложение, и оно все равно будет работать. Если его местоположение может быть обнаружено с помощью django. Что более важно, имя HTML-файла должно совпадать с исходным именем HTML-файла, предоставленным django.
Добавьте этот путь к шаблону в свой settings.py :
Определите имя и блок, который вы хотите переопределить. Это можно сделать, заглянув в каталог django admin / templates. Я использую virtualenv, поэтому для меня путь здесь:
В этом примере я хочу изменить форму добавления нового пользователя. Шаблон, отвечающий за это представление, - change_form.html . Откройте change_form.html и найдите {% block%}, который вы хотите расширить.
В вашем change_form.html напишите что-нибудь вроде этого:
Загрузите свою страницу, и вы увидите изменения
источник
../
в «расширяющий» путь и указать более уникальный исходный путь{% extends "../../admin/templates/admin/index.html" %}
. ссылка на ответесли вам нужно перезаписать файл
admin/index.html
, вы можете установить параметр index_template файлаAdminSite
.например
и поместите свой шаблон в
<appname>/templates/admin/my_custom_index.html
источник
{% extends "admin/index.html" %}
из my_custom_index.html и иметь ссылку на шаблон администратора django, не копируя его. Спасибо.С
django
1.5 (по крайней мере) вы можете определить шаблон, который хотите использовать для определенногоmodeladmin
см. https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#custom-template-options
Вы можете сделать что-то вроде
С
change_form.html
расширением простого шаблона htmladmin/change_form.html
(или нет, если вы хотите сделать это с нуля)источник
Ответ Ченгса правильный, однако, согласно документам администратора, не каждый шаблон администратора может быть перезаписан таким образом: https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#overriding-admin-templates
Мне пришлось перезаписать login.html администратора и поэтому пришлось поместить перезаписанный шаблон в эту структуру папок:
(без подпапки myapp в админке) У меня недостаточно репутации для того, чтобы комментировать сообщение Ченга, поэтому мне пришлось написать это как новый ответ.
источник
Лучший способ сделать это - поместить шаблоны администратора Django в свой проект. Таким образом, ваши шаблоны будут в
templates/admin
наличии, в то время как стандартные шаблоны администратора Django будут присутствоватьtemplate/django_admin
. Затем вы можете сделать что-то вроде следующего:шаблоны / администратор / change_form.html
Если вы беспокоитесь об обновлении стандартных шаблонов, вы можете включить их с помощью svn externals или аналогичного.
источник
--ignore
аргумент сmakemessages
. См .: docs.djangoproject.com/en/dev/ref/django-admin/#makemessagesЯ не смог найти ни одного ответа или раздела в официальных документах Django, в котором была бы вся информация, необходимая мне для переопределения / расширения шаблонов администратора по умолчанию, поэтому я пишу этот ответ как полное руководство, надеясь, что это будет полезно для других в будущем.
Предполагая стандартную структуру проекта Django:
Вот что вам нужно сделать:
В
mysite/admin.py
создайте подклассAdminSite
:Обязательно импортируйте
custom_admin_site
вadmin.py
свои приложения и зарегистрируйте в нем свои модели, чтобы отображать их на настраиваемом сайте администратора (если хотите).В
mysite/apps.py
, создайте подклассAdminConfig
и установитеdefault_site
значениеadmin.CustomAdminSite
из предыдущего шага:В
mysite/settings.py
заменитеdjango.admin.site
inINSTALLED_APPS
наapps.CustomAdminConfig
(конфигурация пользовательского приложения администратора из предыдущего шага).В
mysite/urls.py
заменитеadmin.site.urls
URL-адрес администратора наcustom_admin_site.urls
Создайте шаблон, который вы хотите изменить, в своем
templates
каталоге, сохранив структуру каталогов шаблонов администратора Django по умолчанию, как указано в документации . Например, если вы вносили измененияadmin/index.html
, создайте файлtemplates/admin/index.html
.Таким образом можно изменить все существующие шаблоны, а их имена и структуры можно найти в исходном коде Django .
Теперь вы можете либо переопределить шаблон, написав его с нуля, либо расширить, а затем переопределить / расширить определенные блоки.
Например, если вы хотите сохранить все как есть, но хотите переопределить
content
блок (который на индексной странице содержит список приложений и их моделей, которые вы зарегистрировали), добавьте следующее вtemplates/admin/index.html
:Чтобы сохранить исходное содержимое блока, добавьте
{{ block.super }}
туда , где вы хотите, чтобы исходное содержимое отображалось:Вы также можете добавлять пользовательские стили и скрипты, изменив
extrastyle
иextrahead
блоки.источник
Я согласен с Крисом Праттом. Но я думаю, что лучше создать символическую ссылку на исходную папку Django, в которую помещаются шаблоны администратора:
и, как видите, это зависит от версии Python и папки, в которой установлен Django. Так что в будущем или на рабочем сервере вам может потребоваться изменить путь.
источник
это сайте было простое решение, которое работало с моей конфигурацией Django 1.7.
ПЕРВЫЙ: создайте символическую ссылку с именем admin_src в каталоге template / вашего проекта на установленные вами шаблоны Django. Для меня на Dreamhost, использующего virtualenv, мои "исходные" шаблоны администратора Django находились в:
ВТОРОЙ: Создайте административный каталог в templates /
Итак, каталог / шаблон моего проекта теперь выглядел так:
ТРЕТИЙ: В вашем новом каталоге template / admin / создайте файл base.html с таким содержимым:
ЧЕТВЕРТОЕ: Добавьте своего администратора favicon-admin.ico в свою статическую корневую папку img.
Готово. Легко.
источник
для индекса приложения добавьте эту строку в какой-нибудь общий файл py, например url.py
для индекса модуля приложения: добавьте эту строку в admin.py
для списка изменений: добавьте эту строку в класс администратора:
для шаблона формы модуля приложения: добавьте эту строку в свой класс администратора
и т.д. и найдите другие в тех же классах модуля администратора
источник
Вы можете использовать django-overextends , который обеспечивает циклическое наследование шаблонов для Django.
Он взят из Mezzanine CMS, откуда Стивен извлек его в отдельное расширение Django.
Дополнительную информацию вы найдете в разделе «Переопределение и расширение шаблонов» (http: /mezzanine.jupo.org/docs/content-architecture.html#overriding-vs-exnding-templates) внутри документации Mezzanine.
Для более глубокого понимания загляните в блог Стивенса «Наследование круговых шаблонов для Django» (http: /blog.jupo.org/2012/05/17/circular-template-inheritance-for-django).
И в группах Google обсуждение (https: /groups.google.com/forum / #! Topic / mezzanine-users / sUydcf_IZkQ), положившее начало разработке этой функции.
Примечание:
У меня нет репутации добавлять больше двух ссылок. Но я думаю, что ссылки предоставляют интересную справочную информацию. Поэтому я просто опустил косую черту после «http (s):». Может быть, кто-нибудь с лучшей репутацией сможет восстановить ссылки и удалить эту заметку.
источник