Вложенный блок Django с {% include%} - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь вложить блоки с Django 3. У меня есть разделы html, которые иногда повторно используются на странице. Я не думаю, что мне придется прибегать к дублированию шаблонов, но я не могу заставить его работать;

У меня есть этот шаблон

{% extends 'base.html' %}
{% include 'site_part.html' %}

{% block content %}

Some Content

<br>
And here I insert the child content

{% block part_of_site %}
{% endblock %}

{% endblock %}

И site_part_ html вот так;

{% block part_of_site %}

Okay, i am loaded!

{% endblock %}

В базе. html У меня есть только это:

{% block content %}
{% endblock %}

Я бы ожидал, что он выдаст "Хорошо, я загружен!" строка на итоговой странице, в блоке контента. Тем не менее, он остается пустым. Я посмотрел, но большинство примеров гораздо более продвинутые, чем мне нужно, и я не могу заставить их работать.

Если я удаляю оператор extends при этом запуске и строки содержимого блока, он загружает включенный html.

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

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Вам нужно переместить {% include 'site_part.html' %} в блок {% block content %}.

content.html

{% extends 'base.html' %}

{% block content %}
Some Content

<br>
And here I insert the child content

{% include 'site_part.html' %}
{% block part_of_site %}
{% endblock %}

{% endblock %}

Затем, по вашему мнению, вам нужно вернуть шаблон контента. Я назвал его content.html здесь.

def your_view(request):
    return render(request, "content.html")

Вы можете поместить include в любом месте блока content, он не обязательно должен быть прямо перед блоком part_of_site.

0 голосов
/ 31 января 2020

Вы можете вызвать содержимое из блока 'part_of_site' в любом дочернем шаблоне, используя {{block.super}}, например:

{% extends 'site_part.html' %}

{% block content %}

  Some Content

  <br>

  {% block part_of_site %}
    {{ block.super }}
  {% endblock %}

{% endblock %}

Вы должны использовать {% extends 'base.html' %} в 'site_part. html 'шаблон. Все потомки 'site_part. html' также будут потомками базы. html

{% extends 'base.html' %}  

{% block part_of_site %}
  Okay, i am loaded!
{% endblock %}

Если вы хотите использовать вместо {% include %}, измените свой код следующим образом:

{% extends 'base.html' %}

{% block content %}

  Some Content

  <br>

  {% include 'site_part.html' %}

{% endblock %}
...