Django вводит данные после base.html

У меня есть файл base.html, который представляет собой меню боковой панели. вот так:

<body>
    <div class="wrapper">
        <nav id="sidebar">
            <div class="sidebar-header">
                <h3>Welcome!</h3>
            </div>
    
            <ul class="list-unstyled components">
                <li class="active">
                    <a href="#list">List</a>
                </li>
                <li>
                    <a href="#">Item 1</a>
                </li>
                <li>
                    <a href="#">Item 2</a>
                </li>
            </ul>
        </nav>
    </div>
</body>

У меня также есть текстовый файл, содержимое которого я хочу показать. Поэтому я настроил свое представление следующим образом:

def list(request):
    f = open('textFile.txt', 'r')
    file_content = f.read()
    f.close()
    context = {'file_content': file_content}
    print(file_content)
    return render(request, "list.html", context)

Получаемый HTML-файл, который будет отображать данные, выглядит следующим образом:

{% extends 'base.html' %}

{{ file_content }}

Проблема в том, что теперь отображаются данные текстового файла. и если я удалю {% extends 'base.html' %}, то данные текстового файла отобразятся, но я потеряю боковую панель. Как я могу решить эту проблему?

Вы должны определить некоторые блоки для переопределения, используя наследование шаблонов в Django:

<!--base.html-->
<body>
    <div class="wrapper">
        <nav id="sidebar">
            <div class="sidebar-header">
                <h3>Welcome!</h3>
            </div>
    
            <ul class="list-unstyled components">
                <li class="active">
                    <a href="#list">List</a>
                </li>
                <li>
                    <a href="#">Item 1</a>
                </li>
                <li>
                    <a href="#">Item 2</a>
                </li>
            </ul>
        </nav>
        <main>
            {% block content %}{% endblock %}
        </main> 
    </div>
</body>


<!--list.html-->
{% extends 'base.html' %}

{% block content %}{{ file_content }}{% endblock %}

Вам нужно использовать {% block %} в вашем base.html. Затем, когда вы расширяете свой шаблон, вы можете указать, что file_content идет в блоке. Например:

base.html

<div>Sidebar</div>
{% block after_sidebar %}{% endblock %}

конечный файл:

{% extends 'base.html' %}
{% block after_sidebar %}
    {{ file_content }}
{% endblock %}

Смотрите больше в Django Docs - Template Inheritance

пожалуйста, внимательно прочитайте о "extend" https://docs.djangoproject.com/en/4.1/ref/templates/language/#templates

В вашем base.html должны быть любые теги блока ( {% block 'myname' %}{% endblock 'myname' %}), которые вы должны расширить.

<-- base.html -->
<body>
    <div class="wrapper">
        <nav id="sidebar">
            <--  ... any staff here --> 
        </nav>
        {% block 'myname' %}{% endblock 'myname' %}
    </div>
</body>

после этого:

<-- your template -->
{% extends 'base.html' %}
{% block 'myname' %}{{ file_content }}{% endblock 'myname' %}
Вернуться на верх