2011-02-04 3 views
11

Я использую Django 1.2.4 на Ubuntu 10.10. Я пытаюсь переопределить шаблон index.html для модуля admin. Я слежу за этими instructions. Я также посмотрел на это question, но у меня все еще есть трудности.Сложность переопределения шаблона администратора Django

инструкции говорят, чтобы создать admin каталог в каталоге шаблонов:

templates/ 
    admin/ 
     index.html 

Я хочу, чтобы переопределить один блок в index.html. (На самом деле, все, что я хочу сделать, это добавить текст в конце концов, есть более простой способ, чем копировать/вставить весь блок и изменить его.?) (Update: Похоже, {{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

Не уверен, что если вы нашли ответ, но вы должны изменить

{% 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/ 

и вставьте его в папку шаблонов в качестве отправной точки

13

ошибка рекурсии происходит потому, что вы расширения admin/index.html с самим собой.

Вы можете:

  • скопировать весь admin/index.html шаблон в вашем templates/admin/ каталоге, и он будет заменить шаблон по умолчанию с вашим
  • переопределять значение index.html на приложение или модели, как описано here

Я знаю, что это уже поздно после вопроса, но вы знаете, google travel ...

7

Изменить настройки.ру с дополнительной папке шаблона, например:

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/шаблоны/администратора добавить свой собственный файл index.html, как:

{% extends "contrib/admin/templates/admin/index.html" %} 

{% block branding %} 
    <h1 id="site-name">Administration for TheLittleButtonCo</h1> 
{% endblock %} 

Возможны вариации, очевидно. Это работает на Django 1.3.1 окончательного

+0

Чистое решение! –

+0

Как вы определяете путь к установке jdango без жесткого кодирования? – maazza

+1

@maazza: 'import django; os.path.dirname (Джанго .__ файл __) ' – utapyngo