Django: переопределение «не подлежащих переопределению» шаблонов администратора для приложения, а не для проекта? - PullRequest
0 голосов
/ 09 июня 2009

Документация Django четко гласит:

Не каждый шаблон в contrib \ admin \ templates \ admin может быть переопределен для приложения или модели.

Затем перечисляются те, которые могут, и base.html, base_site.html и index.html - те, которые меня интересуют - не входят в список. Они могут быть переопределены для каждого проекта, но не для каждого приложения.

Мой вопрос: есть ли способ обойти это, не затрагивая редактирование кода внутри django.contrib.admin? Я готов рассмотреть некоторые решения для обезьяноподготовки :-). Я действительно хочу, чтобы в моем приложении были пользовательские версии этих трех файлов в каталоге templates, и чтобы каждый проект использовал приложение для их использования.

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

Я понимаю причину решения сделать только несколько шаблонов, которые можно переопределить для каждого приложения; в конце концов, если бы можно было переопределить их все, какое переопределенное администратор приложения имело бы приоритет?

Но в моем случае приложение будет «центральным элементом» нескольких клиентских проектов, а другие приложения в этих проектах просто играют вспомогательную роль.

Настройка существующих шаблонов на основе CSS пока не дает вам результатов, и я не решаюсь полагаться на решения для манипулирования DOM JavaScript, если в этом нет крайней необходимости.

Одно из решений, которое приходит на ум, - это поместить пользовательские шаблоны base.html и т. Д. В appname / templates / admin /, а затем вставить их в папку шаблонов проекта. Таким образом, любые обновления приложения автоматически вступают в силу на уровне проекта.

Символьные ссылки, вероятно, мой метод выбора, если не предлагается ничего лучшего, но я хотел бы услышать, есть ли у кого-нибудь более хорошее решение.

1 Ответ

1 голос
/ 09 июня 2009

Как я вижу, ваша цель - переопределить шаблоны для всего проекта, а не для приложения или модели, но вы не хотите помещать шаблоны в папку шаблонов проекта.

Так что вам просто нужно создать файл base.html и т. Д. В папке your_app / templates / admin. Далее вы должны сказать django, что шаблоны должны загружаться не только из папки шаблонов проекта, но и из папки вашего приложения. Это можно сделать с помощью переменной TEMPLATES_DIR в файле settings.py, что-л. вот так:

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates'),
    os.path.join(PROJECT_PATH, 'my_app','templates'),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...