Простой блог на Django - часть 12. Личный кабинет
Поскольку теперь у нас есть регистрация и авторизация, то самое время заняться созданием личного кабинета. Как всегда, начнём с того, что пропишем маршрут в файле posts/urls.py:
path("<str:username>/", views.profile, name="profile"),
Перейдём к файлу posts/views.py:
def profile(request, username):
author = get_object_or_404(User, username=username)
posts = author.posts.all()
paginator = Paginator(posts, paginator_pages)
page = paginator.get_page(request.GET.get('page'))
status = None
if request.user.is_authenticated:
status = "Пользователь авторизован"
context = {
'author': author,
'page': page,
'status': status,
}
return render(request, 'profile.html', context)
В этой View-функции мы получаем объект пользователя, а затем используя связь "posts", получаем все его посты. Дальше идёт стандартная работа с пагинацией, плюс я добавил переменную status, чтобы продемонстрировать передачу переменных с тем или иным значением, из View в шаблон.
Сам шаблон profile.html выглядит так:
{% extends "index.html" %}
{% block title %} Записи пользователя {{ author.username }} {% endblock %}
{% block content %}
<main role="main" class="container">
<div class="row">
<div class="col-md-3 mb-3 mt-1">
<div class="card">
<div class="card-body">
<div class="h2">
{{ author.get_full_name}}
</div>
<div class="h3 text-muted">
{{ author.username }}
</div>
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
{{ status }}
</li>
<li class="list-group-item">
<div class="h6 text-muted">
Записей: {{ author.posts.count }}
</div>
</li>
</ul>
</div>
</div>
<div class="col-md-9">
{% for post in page %}
{% include "includes/post_in_cat.html" with post=post %}
{% endfor %}
{% include "includes/paginator.html" %}
</div>
</div>
</main>
{% endblock %}
Здесь особо ничего нового, поскольку мы используем готовые куски шаблона, которые уже были написаны для отображения списка постов на главной. Логика отображения постов тут точно такая же, с той лишь разницей, что пользователю отображаются только его посты. Ну а в одной из следующих заметок, мы пропишем ссылки для создания, редактирования и удаления постов.
Уже традиционно, все изменения в коммите - https://github.com/maclen2007/simple_django_blog/commit/5f57ea5a87a058daaf629e41a33429601e144dec
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()