{% block что-то%} всегда отображается несмотря на то, что в операторе if ложно - PullRequest
0 голосов
/ 29 июня 2018

У меня есть два типа статей в блогах. Регулярные статьи блога и перевод статей. Они оба имеют разную HTML-разметку. У меня есть булева переменная translation_bool в моих моделях, чтобы проверить, переводная это статья или нет. Если это так, я хочу, чтобы он отображал мой {% block translation %}, а если нет {% block translation %}. Он работал с простым HTML-кодом и не использовал HTML-теги. Но у меня было так много кода многократного использования, что им было трудно управлять.

Итак, мой вопрос: почему это происходит, несмотря на то, что оно находится внутри оператора if.

Шаблон статьи :

{% extends "base_generic.html" %}

{% load static %}

{% block js %}...{% endblock %}

{% if blogpost.translation_bool == True %}
        {% block translation %}....{% endblock %}
{% else %}
        {% block content %}...{% endblock %}
{% endif %}

{% block sidebar %}....{% endblock %}

В Базовый базовый шаблон :

  <div class="row">
      <div class="col-md-1"></div>
      <div class="col-md-8">

            {% block content %}{% endblock %}

            {% block translation %}{% endblock %}

      </div>
      <div class="col-md-3">
        {% block social_media %}...{% endblock %}
        {% block sidebar %}...{% endblock %}
      </div>
  </div>

</body>

1 Ответ

0 голосов
/ 29 июня 2018

Это потому, что блоки, не определенные в дочернем шаблоне, будут отображать значение из родительского шаблона. Так что в вашем случае вы должны выполнить проверку внутри родительского шаблона. Или, если невозможно переопределить блоки в потомке с пустым содержимым:

{% block translation %}
    {% if blogpost.translation_bool == True %}
        {{ block.super }}
    {% else %}
    {% endif %}
{% endblock %}

{% block content %}
    {% if blogpost.translation_bool == False %}
        {{ block.super }}
    {% else %}
    {% endif %}
{% endblock %}

Примечание {{ block.super }} будет отображать содержимое из родительского шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...