3.4 Использование шаблонов Jinja и форм в FastAPI
6 из 6 шагов пройдено
1 из 1 баллa  получен

Продолжим разработку шаблонов для нашего приложения, первым делом мы изменим что возвращает наш метод получения одной записи из БД(списка):

@app.get(path="/message/{message_id}")
def get_message(request: Request, message_id: int) -> HTMLResponse:
    try:
        return templates.TemplateResponse("message.html", {"request": request, "message": messages_db[message_id]})
    except IndexError:
        raise HTTPException(status_code=404, detail="Message not found")

По аналогии с методом, который возвращает все записи, мы также возвращаем наш запрос и возвращаем одну запись messages_db[message_id] в виде переменной message.

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

В шаблоне Jinja мы будем проверять, передается ли переменная message с помощью блока {% if message %}. Тем самым, мы будем выводить данные одной записи, если передается переменная message, в противном случае она отображает содержимое в блоке {% else %}, выводя список записей.

{% extends "main.html" %}

{% block crud_container %}
    {% if message %}
    <article class="card container-fluid">
        <br/>
        <h2>ID: {{ message.id }}</h2>
        <p>
            <strong>Text: {{ message.text }}</strong>
        </p>
    </article>
    {% else %}
    <section class="container-fluid">
        <h2 align="center">Messages</h2>
        <br>
        <div class="card">
            <ul class="list-group list-group-flush">
                {% for message in messages %}
                <li class="list-group-item">{{ message.id }}. <a href="/message/{{message.id}}">{{ message.text }}</a></li>
                {% endfor %}
            </ul>
        </div>
    </section>
    {% endif %}
{% endblock %}

Запустим наше приложение и первым делом добавим несколько записей через документацию. Далее перейдем на главную страницу, получив все записи из нашей БД(списка).

Теперь нажав на любую запись мы увидим ее вывод уже в виде шаблона.

До этого момента мы работали только с GET запросами и получали данные. В следующем шаге мы реализуем возможность добавлять записи прямо из шаблона,  добавив форму.


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