Продолжим разработку шаблонов для нашего приложения, первым делом мы изменим что возвращает наш метод получения одной записи из БД(списка):
@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 запросами и получали данные. В следующем шаге мы реализуем возможность добавлять записи прямо из шаблона, добавив форму.