2017-02-20 15 views
0

Вот официальный Django учебник, шаблоны раздел:Как понять шаблоны Django?

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

В каталоге шаблонов, который вы только что создали, создайте другой каталог, называемый опросами, и внутри него создайте файл index.html. Другими словами, ваш шаблон должен быть в опросах/шаблонах/опросах/index.html. Из-за того, как работает загрузчик шаблонов app_directories, как описано выше, вы можете ссылаться на этот шаблон в Django просто как polls/index.html.

... и объяснение «:» именования

Теперь мы могли бы быть в состоянии уйти с проставлением наших шаблонов непосредственно в опросах/шаблоны (а не создавать подкаталог опросы), но будет на самом деле плохой идеей. Django выберет первый найденный шаблон, имя которого совпадает, и , если у вас был шаблон с тем же именем в другом приложении, Django не смог бы отличить их. Мы должны иметь возможность указать Django на правильном, и самый простой способ обеспечить это путем их замены. То есть, помещая эти шаблоны в другой каталог, названный для самого приложения.

, но другое приложение имеет различный абсолютный путь templates. Есть ли проблемы с такой структурой проекта?

my_project 
    | 
    +--first_app 
    |  | 
    |  +--templates 
    |    | 
    |    +--index.html 
    |    +--foo.html 
    +--second_app 
      | 
      +---templates 
        | 
        +index.html 

Мы my_project/first_app /templates/index.html и my_project/second_app /templates/index.html - без столкновений.

Джанго выбрать первый шаблон он находит имя которого совпадает

Я полагаю, Django, используя относительный путь для сравнения Insted абсолюта. В чем смысл? Есть ли скрытая прибыль?

Я просто погружаюсь в Django, и это похоже на нарушение принципа DRY. Итак, почему такая элегантная и pythonic framework использует такое странное соглашение?

ответ

1

Все под templates/ сгруппировано в один список. Они «накладываются друг на друга» в порядке вашей настройки INSTALLED_APPS (сначала нижняя).

В вашем случае, если INSTALLED_APPS = ['first_app', 'second_app'], Джанго будет знать о двух шаблонов:

  • index.html из first_app, который переписывается точно также именем один из second_app.

  • foo.html из first_app.

So ...все ниже templates/в каждом из ваших приложений сгруппировано. Поэтому полезно использовать пространство имен, упомянутое в документах. Так, например, second_app/templates/second_app/index.html.

Что Django позволяет вам переписать шаблоны удобно: вы можете, например, перезаписать страницу входа по умолчанию.

+0

'Итак ... все под шаблонами/в каждом из ваших приложений сгруппировано вместе.' Почему? Это настолько странный побочный эффект. Если я хочу сохранить все (из всех приложений) мои шаблоны вместе, я бы поместил их в одну папку. Разве это не выглядит яснее? – Absolut

+0

Идея состоит в том, что приложения разрабатываются отдельно. Вы также можете повторно использовать существующие приложения с открытым исходным кодом. С помощью механизма поиска шаблонов django вы можете настроить шаблоны этих приложений. –

+0

Я могу настроить внешние приложения, не дублируя структуру папок. Я ошибаюсь? – Absolut

Смежные вопросы