Создание сайта на Django: Урок 20, профиль пользователя в Django: часть 2 (представление профиля)
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Руководства «Django»
Комментариев: 0

Представление профиля пользователя в Django

Давайте создадим в нашем модуле system -> views -> profiles.py

Получится следующая структура (если вы следуете моим урокам и декомпозиции):

 

А теперь перейдем к представлению:

modules/system/views/profiles.py

from django.views.generic import DetailView

from modules.system.models import Profile


class ProfileView(DetailView):
    """
    Представление для показа профиля на страничке
    """
    model = Profile
    context_object_name = 'profile'
    template_name = 'modules/system/profiles/profile-detail.html'
    queryset = model.objects.detail()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = f'Страница пользователя: {self.object.user.username}'
        return context

Пояснения:

  • Мы добавили представление DetailView на основе классов, что позволит нам посмотреть полный профиль. 
  • Задали context_object_name, как 'profile' для использования переменных в шаблоне.
  • Добавили контекст для заголовка.

Примечание: если вы используете ту же структуру файлов и папок, то в views/__init__.py добавим следующее:

from modules.system.views.profiles import *

__all__ = '__all__'

Теперь создадим файл urls.py в system, где добавим представление профиля и подключим его в backend/urls.py.

modules/system/urls.py

from django.urls import path

from modules.system.views import ProfileView

urlpatterns = [
    path('user/<str:slug>/', ProfileView.as_view(), name='profile'),
]

И подключим в основном файле urls.py

backend/urls.py

from django.contrib import admin
from django.urls import path, include

from django.conf.urls.static import static
from backend import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('modules.blog.urls')),
    path('s/', include('modules.system.urls'))
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Пояснения:

  • Показываю наш весь файл urls.py для напоминания.
  • Все системные ссылки будут начинаться с s, как это реализовано на notehunter.net. Вы можете сделать как пожелаете, хоть system, хоть оставить пустое значение и ссылки будут как /user/ и т.д.
  • Профиль будет находиться по ссылке следующего вида /s/user/slug/

А теперь приступаем к самому шаблону, создадим следующую структуру по декомпозиции: templates -> modules -> system -> profiles -> profile-detail.html

templates/modules/system/profiles/profile-detail.html

{% extends 'main.html' %}

{% block content %}
    <div class="card border-0">
        <div class="card-body">
            <div class="row">
                <div class="col-md-3">
                    <figure>
                        <img src="{{ profile.get_avatar }}" class="img-fluid rounded-0" alt="{{ profile }}">
                    </figure>
                </div>
                <div class="col-md-9">
                     <h5 class="card-title">
                        {{ profile }}
                    </h5>
                    <div class="card-text">
                        <ul>
                            <li>Никнейм: {{ profile.user.username }}</li>
                            <li>Заходил: {{ profile.user.last_login }}</li>
                            <li>Возраст: {{ profile.get_age }}</li>
                            <li>О себе: {{ profile.bio }}</li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

Смотрим результат:

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

Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)