Джанго расширяет только один шаблон - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть приложение под названием exercise_tracker, и я хочу расширить свой base.html двумя шаблонами: exercise_list.html и footer.html.Для exercise_list.html я установил view для footer.html нет.Он не отображает содержимое footer.html.Не могли бы вы дать мне подсказку, что я делаю неправильно?1018 *

footer.html

{% extends 'exercise_tracker/base.html' %}

{% block footer %}
    <p>Footer</p>
{% endblock %}

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

Вам не нужен отдельный шаблон для нижнего колонтитула.Если вы используете один и тот же нижний колонтитул для всего сайта, вы можете просто написать его в base.html.Если вы хотите переопределить его только в некоторых местах, просто добавьте блок для нижнего колонтитула в базовый шаблон и переопределите его там, где вы хотите.

Это должно дать вам представление:

База.html:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    // Site-Wide Links , CDN go here
    {% block head %} 
    {% endblock %
  </head>
  <body>
// Base code goes here
    {% block content %}
    {% endblock %}    
<footer>
// Base Footer goes here
    {% block footer %}
    {% endblock %}

</footer>

  </body>
</html>

Some_template.html:

{% extends 'exercise_tracker/base.html' %} 
    {% block head %}
    //Your CSS , CDN here 
    {% endblock %}

    {% block content %}
 // Your HTML here
    {% endblock %}

    {% block footer %}
//Your Footer Here if you need to add something
    {% endblock %}
0 голосов
/ 22 декабря 2018

Использование тега шаблона extends указывает Django заполнять блоки в родительском шаблоне содержимым блока, определенным только в используемом дочернем шаблоне!

Когда вы заполняете только *Блок 1006 * в вашем exercice_list.html , тогда при вызове представления exercice_list будет заполнен только блок content base.html .Это потому, что django не ищет, какие другие шаблоны могут расширять родительский шаблон, поэтому его не волнует, что где-то есть footer.html , который также расширяет его.Если вы хотите, чтобы содержимое из footer.html включалось при вызове представления exercice_list, вам необходимо добавить его либо в base.html , либо в exercice_list.html .

Совершенно нормально хранить нижний колонтитул в отдельном шаблоне, но его необходимо добавить также в виде блока в exercice_list.html :

{% extends 'exercise_tracker/base.html' %}
{% block content %}
<table>
{% for exercise in exercises %}
    <tr>
        <td>{{ exercise.date_learned }}</td>
        <td>{{ exercise.time_studied }}</td>
        <td>{{ exercise.language_learned }}</td>
        <td>{{ exercise.description|linebreaksbr }}</td>
    </tr>
{% endfor %}
</table>
{% endblock %}

{% block footer %}
    {% include "footer.html" %}
{% endblock %}

И ваш footer.html может выглядеть следующим образом:

<p>Footer</p>

Если вы хотите больше прочитать об этом, ТАК вопрос на include и extend - хорошая отправная точка: шаблоны django: включайте и расширяйте Или затем превосходные документы django о наследовании шаблонов .

Надеюсь, чтопомогло и счастливого кодирования!

0 голосов
/ 22 декабря 2018

Я предлагаю вам отредактировать exerc_list.html

{% extends 'exercise_tracker/base.html' %}

{% block content %}
    <table>
    {% for exercise in exercises %}
        <tr>
            <td>{{ exercise.date_learned }}</td>
            <td>{{ exercise.time_studied }}</td>
            <td>{{ exercise.language_learned }}</td>
            <td>{{ exercise.description|linebreaksbr }}</td>
        </tr>
    {% endfor %}
    </table>
{% endblock %}
{% block footer %}
   <p>Footer placeholder</p>
{% endblock %}

In base.html

<html>
    <body>
        {% block content %}
        {% endblock %}

        {% block footer %}
        {% endblock %}
    </body>
</html>

Это может решить вашу проблему.

...