Включение / блоки шаблонов Django - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующая структура шаблона:

base.html:

<html>
  <head>
  </head>
  <body>
    <div class="main-content">
      {% block body %}{% endblock %}
    </div>
  </body>
</html>

detail.html расширение base.html:

{% extends "base.html" %}

{% block body %}
    <!-- filter side panel -->
    {% block filter_panel %}
    {% endblock %}
{% endblock %}

list.html расширение base.html:

{% extends "base.html" %}

{% block body %}
    <!-- filter side panel -->
    {% block filter_panel %}
    {% endblock %}
{% endblock %}   

filter.html:

{% extends "detail.html" %}
{% block filter_panel %}
  ...
  ...
{% endblock%}

Теперь я реализовал панель фильтров, которая вызывается кнопкой, используя onclick="filter_open()".Соответствующий метод находится во внешнем файле JS и в основном открывает боковую панель:

function filter_open() {
  document.getElementById("filtersidebar").style.display = "block";
  document.getElementById("filtersidebar-outer").classList.add("fc-filters-overlay");
}

Этот фильтр я хочу сделать доступным на detail.html и list.html.Итак, я создал новый файл filter.htmldetail.html, и list.html имеют {% block filter %}{% endblock %}, а в filter.html я добавляю функциональность в соответствующие блоки Django.

Однако кнопка теперь выдает ошибку:

Uncaught TypeError: Cannot read property 'style' of null
  at filter_open (main.js:146)
  at HTMLButtonElement.onclick ((index):158)

Полагаю, это потому, что я переместил фильтр в «filter.html».

1 Ответ

0 голосов
/ 10 октября 2018

Из того, что выглядит, вам нужно использовать тег include вместо использования наследования шаблонов, то есть:

detail.html

{% extends "base.html" %}

{% block body %}
    <!-- filter side panel -->
    {% include "filter.html" %}
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...