Django multiple template inheritance - это правильный стиль?

Yo

поэтому у меня есть base.html:

<html>
    <body>
        <div id="header"> ... </div>
        {% block main %}{% endblock %}
        <div id="footer"> ... </div>
    </body>
</html>

и у меня также есть страница с сообщениями о пользователях:

{% extends base.html %|
{% block main%}
    <h1>welcome to yours posts hangout!</h1>

      ... snazzy code here that shows all the posts ...

{% endblock%}

Теперь проблема в том, что, возможно, у меня есть другая страница:

{% extends base.html %|
{% block main%}
    <h1>look at all posts by all users!</h1>

      ... snazzy code here that shows all the posts by all the users ...

{% endblock%}

потому что все мы принадлежим к mensa, мы можем видеть, что у меня дразнящий код повторяется - дважды (для тавтологической забавы!)

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

Мое понимание шаблонов все же шаткое - я думаю, что это способ сделать это, есть ли лучший/стандартизованный способ?

snazzy.html:

{% extends base.html %|
  {% block aboveSnazzy%}
  {% endblock %}

      ... snazzy code here that shows all the posts by all the users ...

  {% block belowSnazzy%}
  {% endblock %}
{% endblock%}

а затем для каждой из разных частей, я могу иметь:

usersArea.html:

{% extends snazzy.html %|
  {% block aboveSnazzy%}
      <h1>welcome to yours posts hangout!</h1>
  {% endblock %}


  {% block belowSnazzy%}
      <h1>i didn't think this far ahead in the example</h1>
  {% endblock %}
{% endblock%}

и т.д. для других частей тоже!

ok, поэтому я знаю, что могу просто отправить параметр с другим заголовком или что у вас есть - пусть притворяется, что вышеупомянутый материал Snazzy, я не знаю, показывая какой-то другой шаблон, который я хотел бы или что-то делать, -тривиален. Это то, что я подробно описал над "способом" для этого?

ура!

Ответы

Ответ 1

Yo.: -)

Ответ зависит от того, насколько ваши шаблоны имеют общий характер.

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

    {% extends base.html %|
    {% block page_heading %}{% endblock %}
        ... snazzy code here that shows all the posts by all the users ...
    {% block extra_content %}{% endblock %}
    
  • если ваши шаблоны не имеют общего месива, но разделяют определенный блок контента, это другая ситуация. Здесь сложно создать правильную структуру наследования. Таким образом, вы можете использовать {% include%} здесь: Например, создайте еще один шаблон, в котором отображаются сообщения (дразнящий код, который показывает все сообщения), например _list_posts.html. Вы можете создать еще один шаблон, в котором отображаются сообщения (классный код, который показывает все сообщения), например _list_posts.html. Затем используйте его в шаблонах для детей.

    {% extends base.html %|
    {% block main%}
    <h1>welcome to yours posts hangout!</h1>
    {% include '_list_posts.html' %}
    {% endblock%}
    

    Вы также можете использовать тег включения.

Какой способ выбрать? Попробуйте ответить на вопрос: может (и должен) эти два шаблона иметь общего предка? Если да, перейдите для первого варианта, если нет - для второго.