Вопрос по django-templates, django-admin, django, python – Пользовательские шаблоны администратора django не работают

16

Я пытался получить пользовательские шаблоны для страницы администрирования для 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 и т. Д. Единственное, что не похоже на "принять" & apos; Шаблоны - это раздел администратора.

Но это не похоже на правильный путь шаблона. У вас есть проект / шаблоны, но ваша структура показывает его как проект / приложение / шаблоны. Daniel Roseman

Ваш Ответ

5   ответов
17

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

<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>

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

@halilpazarlama да, если вы следуете учебнику вdocs.djangoproject.com/en/1.7/intro/tutorial02
Мы должны сделать это в файлеProjects/mysite/templates/admin/base_site.html право?
25

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

Рад видеть, что я не единственный, у кого была эта проблема (ясно, что есть по меньшей мере 15 других). Используя Django 1.10, документы говорят что-то вродеif Вы настраиваете загрузчик, чтобы изменить порядок каталогов - но ничего о самих приложениях.
Просто к вашему сведению, я сейчас прохожу учебник с Django 1.6.5, и мне не пришлось это делать, чтобы он работал.
6

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

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

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

At the command line, navigate to the directory in which the project's settings.py file exists (for me this is R:\jeffy\programming\sandbox\python\django\tutorial\mysite\mysite\) Start the interactive shell: python >>> import settings >>> settings.TEMPLATE_DIRS, which outputs ['R:\\jeffy\\programming\\sandbox\\python\\django\\tutorial\\mysite\\templates']

Так что это ожидаемое расположение каталога шаблонов для этого проекта. Каталог администратора идет в это, иbase_site.html файл идет в это.

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

& quot; Каталог администратора входит в этот & quot; & Lt; - Это. Легко пропустить. Я поместил файлы непосредственно в шаблоны и не мог понять, почему он не работал ...
Примечание,import settings не работал для меня, ноfrom mysite import settings сделал.
Я также назвал каталог верхнего уровняmysite а также мой каталог приложенийmysiteпоэтому, когда я напечатал TEMPLATE_DIRS, и он дал'/Users/username/dev/code/mysite/templates'Я читал слишком быстро и думал, что у меня все правильно, но я не был в.../code/mysite/mysite/templates
4

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 папка на уровне проекта, а не на уровне приложения:

Create a templates directory in your project directory (the one that contains manage.py). Templates can live anywhere on your filesystem that Django can access. (Django runs as whatever user your server runs.) However, keeping your templates within the project is a good convention to follow.

Благодаря этому у меня была следующая структура:

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

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

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

Я могу подтвердить, что у меня была такая же проблема, и я забыл добавить в настройки. УСТАРЕЛА путь к расположению шаблонов. Мне было трудно выяснить, потому что в другом проекте (но с Django 1.9) путь был установлен и все еще не работал, в этом дело в том, что {{site_header | default: _ ('Content Manager Interface & apos;)}} необходимо заменить простым текстом.
4

TEMPLATE_DIRS вsettings.py в правильную папку!

Я добавил в свой основной пост, но в любом случае хороший совет. Yonathan
Я обнаружил свою проблему, сломав шаблон по умолчанию (переименовав в base_site.htmlx), и на странице ошибки было показано, что папка с шаблонами находится в неправильном месте.

Похожие вопросы