Так что для любого, кто застрял в одной точке, это объяснение из онлайн-урока прояснило мне все:
В строке 1 {% extends "base.html"%}сообщает движку шаблонов Django, что текущий шаблон является дочерним шаблоном и наследуется от base.html. Это должна быть первая строка в дочернем шаблоне, иначе он не будет работать. Когда шаблонизатор встречает эту строку, он немедленно загружает родительский шаблон (то есть base.html) и затем заменяет блоки содержимого в родительском шаблоне на блоки содержимого с тем же именем, определенным в дочернем шаблоне.
В основном шаблон, который фактически отображается в этих схемах наследования, является предком или здесь base.html
. Если вы внимательно прочитали следующее:
, а затем заменили блоки содержимого в родительском шаблоне на блоки содержимого с тем же именем, определенные в дочернем шаблоне
Youувидим, что в первом случае, когда я рендерим base.html
, я буду рендерить то, что находится в блоке {% block page_content %}
его потомка, который является base_app.html
. Таким образом, веб-страница, которую я получаю, не будет содержать ничего, относящегося к блоку {% block page_app %}
.
Способ исправить это - сделать так, чтобы информация из {% block page_app %}
в base_app_main.html
всплывала до нашего base.html
.
Для этого я нашел 2 решения:
1 - Вложение или изменение base_app.html
на:
{% extends "base.html" %}
{% block page_content %}
//html here
{% block page_app %}
{% endblock page_app %}
{% endblock page_content %}
В этом случае, когда base.html
отображается, он будетвозьмите всю информацию из блока {% block page_content %}
, который теперь включает в себя блок {% block page_app %}
, и успешно отрендерируйте все.
2 - измените base.html
следующим образом:
//link stylesheet
{% block page_content %}
{% endblock page_content %}
{% block page_app %}
{% endblock page_app %}
//add bootstrap, jQuery and run scripts
Это будет явнопопросите base.html
отобразить блок {% block page_app %}
его потомка, а также работать.
-> Какой метод предпочтительнее? Я не уверена. Явный метод (2) кажется более простым, но он также означает, что если ваш base.html
используется во многих различных проектах, он будет загроможден множеством блоков. Принимая во внимание, что неявный (1) метод лучше с точки зрения СУХОГО ... возможно, некоторые из вас, ребята, могут дать мне знать, что является «стандартным».