Персональная страница пользователя и страница записи

Росту проекта нет предела. Следующий этап развития сервиса Yatube: новые страницы.

  • Страница профайла пользователя: на ней будет отображаться информация об авторе и его посты.
  • Страницу для просмотра отдельного поста.

Страницы профайла и отдельного поста: urls и views

В качестве адреса персональной страницы автора будет использоваться его username, это логично и удобно.В адресе страницы отдельного поста будет содержаться username автора и id поста.

Добавьте в конец файла posts/urls.py новые пути:

from django.urls import path

from . import views

urlpatterns = [
    ...
    # Главная страница
    path('', views.index, name='index'),
    # Профайл пользователя
    path('profile/<str:username>/', views.profile, name='profile'),
    # Просмотр записи
    path('posts/<int:post_id>/', views.post_detail, name='post_detail'),
] 

А в файл posts/views.py добавьте функции:

def profile(request, username):
    # Здесь код запроса к модели и создание словаря контекста
    context = {
    }
    return render(request, 'posts/profile.html', context)


def post_detail(request, post_id):
    # Здесь код запроса к модели и создание словаря контекста
    context = {
    }
    return render(request, 'posts/post_detail.html', context) 

Шаблон страницы профайла

Обычно backend-разработчик берет готовый HTML-код либо комбинирует части существующих шаблонов. Сейчас ваша задача — превратить статичный HTML-код в динамический шаблон.Комментариями в коде отмечено, где нужно заменить статические данные на переменные.

HTML<!DOCTYPE html>
<html lang="ru"> 
  <head>  
    <!-- Подключены иконки, стили и заполенены мета теги -->
    <title>Профайл пользователя <!--Лев Толстой--></title>
  </head>
  <body>       
    <header>
      <nav class="navbar navbar-light" style="background-color: lightskyblue">
        <div class="container">
          <a class="navbar-brand" href="/">
            <img src="/static/img/logo.png" width="30" height="30" class="d-inline-block align-top" alt="">
            <span style="color:red">Ya</span>tube
          </a>
        </div>
      </nav>      
    </header>
    <main>
      <div class="container py-5">        
        <h1>Все посты пользователя <!--Лев Толстой--> </h1>
        <h3>Всего постов: <!-- --> </h3>   
        <article>
          <ul>
            <li>
              Автор: <!--Лев Толстой-->
              <a href="<!-- -->">все посты пользователя</a>
            </li>
            <li>
              Дата публикации: <!-- 31 июля 1854 --> 
            </li>
          </ul>
          <p>
          <!--
            [Фокшаны.] Еще переходъ до Фокшанъ, во время котораго я ѣхалъ съ 
            Монго. Человѣкъ пустой, но съ твердыми, хотя и ложными убѣжденіями.
            Генерал[у] по этому должно быть случаю, угодно было спрашивать о мое
            мъ здоровьи.
            Свинья! К[о]вырялъ носъ и ничего не написалъ — вотъ 2 упрека за 
            нын[ѣшній]     день. Послѣдній упрекъ становится слишкомъ частъ, 
            хотя походъ и можетъ служить въ немъ отчасти извиненіемъ. 
            Отношенія мои съ товарищами становятся такъ пріятны, что мнѣ 
            жалко бросить штабъ. Здоровье кажется (2) лучше. 
          --> 
          </p>
          <a href="<!-- -->">подробная информация </a>
        </article>       
        <a href="<!-- -->">все записи группы</a>        
        <hr>
        <!-- Остальные посты. после последнего нет черты -->
        <!-- Здесь подключён паджинатор -->  
      </div>
    </main>
    <footer class="border-top text-center py-3">
      <p>© <!--2021 --> Copyright <span style="color:red">Ya</span>tube</p>    
    </footer>
  </body>
</html> 

Шаблон страницы просмотра записи

Этот шаблон такой же, как для профайла, но совсем другой: там только один пост, да и дизайн отличается.

HTML<!DOCTYPE html>
<html lang="ru"> 
  <head>  
    <!-- Подключены иконки, стили и заполенены мета теги -->
    <title>Пост <!-- Первые 30 букв поста --></title>
  </head>
  <body>       
    <header>
      <nav class="navbar navbar-light" style="background-color: lightskyblue">
        <div class="container">
          <a class="navbar-brand" href="/">
            <img src="/static/img/logo.png" width="30" height="30" class="d-inline-block align-top" alt="">
            <span style="color:red">Ya</span>tube
          </a>
        </div>
      </nav>      
    </header>
    <main>
      <div class="row">
        <aside class="col-12 col-md-3">
          <ul class="list-group list-group-flush">
            <li class="list-group-item">
              Дата публикации: <!-- 31 июля 1854 --> 
            </li>
            <!-- если у поста есть группа -->   
              <li class="list-group-item">
                Группа: <!-- Название группы -->
                <a href="<!-- -->">
                  все записи группы
                </a>
              </li>
              <li class="list-group-item">
                Автор: <!--Лев Толстой-->
              </li>
              <li class="list-group-item d-flex justify-content-between align-items-center">
              Всего постов автора:  <span ><!-- --></span>
            </li>
            <li class="list-group-item">
              <a href="<!-- -->">
                все посты пользователя
              </a>
            </li>
          </ul>
        </aside>
        <article class="col-12 col-md-9">
          <p>
           <!--
            [Фокшаны.] Еще переходъ до Фокшанъ, во время котораго я ѣхалъ съ 
            Монго. Человѣкъ пустой, но съ твердыми, хотя и ложными убѣжденіями.
            Генерал[у] по этому должно быть случаю, угодно было спрашивать о мое
            мъ здоровьи.
            Свинья! К[о]вырялъ носъ и ничего не написалъ — вотъ 2 упрека за 
            нын[ѣшній]     день. Послѣдній упрекъ становится слишкомъ частъ, 
            хотя походъ и можетъ служить въ немъ отчасти извиненіемъ. 
            Отношенія мои съ товарищами становятся такъ пріятны, что мнѣ 
            жалко бросить штабъ. Здоровье кажется (2) лучше. 
           --> 
          </p>
        </article>
      </div> 
    </main>
    <footer class="border-top text-center py-3">
      <p>© <!--2021 --> Copyright <span style="color:red">Ya</span>tube</p>    
    </footer>
  </body>
</html> 


Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий