Простой блог на 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

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.