Как структурировать папку templates в django и использовать extends

У меня есть папка templates, структурированная следующим образом

/Users/AndyKw/Documents/Python/Else/Yes/templates

Внутри templates у меня есть две папки, admin и registration (дерево см. ниже)

templates (need.html)
|
|-- admin
|
|-- registration (base.html)

Файл, который я использую base.html находится в папке registration. Ему нужно использовать файл , need.html в папке templates с помощью команды extends.

Вопрос следующий:

  • Как настроить в settings.py параметр templates для использования registration в качестве основной папки и через base.html достигать с помощью extends файла need.html в папке templates?

Одним из возможных решений было бы инвертировать путь, поместить need.html в папку registration и поместить base.html в папку templates, но команда разработчиков, похоже, не склоняется к такому решению, это был бы менее благоприятный способ.

Любые идеи/советы приветствуются.

В settings.py:

TEMPLATES = [
    {
        'DIRS': [
            os.path.join(BASE_DIR, 'templates')
        ],
        ...
    }
]

Тогда в need.html:

<head>
  <!-- common headers for all templates -->
  {% block head %}
  {% endblock %}
</head>

<body>
  <!-- common body for all template -->
  {% block body %}
  {% endblock %}
</body>

Затем во всех ваших шаблонах:

{% extends "need.html" %}

{% block head %}
<!-- headers here -->
{% endblock %}

{% block body %}
<!-- body here -->
{% endblock  %}

Я думаю, что вы можете сделать следующее:

В файле settings.py внутри TEMPLATES измените параметр DIRS на:

'DIRS': [os.path.join(BASE_DIR, 'templates/registration'), os.path.join(BASE_DIR, 'templates')],

Таким образом, вы можете использовать {% extends "need.html" %} внутри registration/base.html.

Теперь, если вы хотите загрузить все содержимое base.html ниже расширений, сделайте следующее:

  • файл base.html:

    {% extends "need.html" %}
    
    {% block base_content %}
    
       <html content of base.html>
    
    {% endblock base_content %}
    
  • need.html файл:

    <html content of need.html>
    {% block base_content %}{% endblock base_content %}
    
Вернуться на верх