Задание 1: страница для публикации постов
У зарегистрированных пользователей Yatube всё ещё нет возможности самостоятельно публиковать посты. Пора сделать форму для публикации новых записей.
- Добавьте в шапку сайта ссылку «Новая запись», она должна быть видна только авторизованным пользователям и вести на страницу
/create/
- На странице
/create/
создайте форму для добавления новой публикации- view-функция для страницы
/create/
должна называтьсяpost_create()
; name
дляpath()
страницы/create/
должен бытьpost_create
;- в контекст шаблона страницы
/create/
должна передаваться переменнаяform
. Она должна содержать объектPostForm
, в котором будут два поля:text
(обязательное для заполнения поле);group
(необязательное для заполнения);
- после валидации формы и создания нового поста автор должен быть перенаправлен на страницу своего профайла /profile/<username>/.
Дизайн должен соответствовать шаблону posts/create_post.html. Архив с шаблонами приложен в конце задания.Обратите внимание, что полеgroup
— необязательное: пост можно создать и без указания группы. И ссылка вида{% url 'posts:group_list' post.group.slug %}
сломается: ведь она ждёт аргумент. При попытке отрендерить шаблон с таким кодом возникнет ошибка:
- view-функция для страницы
NoReverseMatch at /
Reverse for 'group_list' with arguments '('',)' not found.
1 pattern(s) tried: ['group/(?P<slug>[-a-zA-Z0-9_]+)/$']
Чтобы избежать этого, нужно добавить в шаблоны проверку на то, есть ли у поста свойство group
. Вот как она может выглядеть:
{% if post.group %}
<a href="{% url 'posts:group_list' post.group.slug %}">все записи группы</a>
{% endif %}
Задание 2: страница редактирования постов
Добавьте страницу редактирования записи с адресом /posts/<post_id>/edit/. View-функцию для этой страницы назовите post_edit()
.
Права на редактирование должны быть только у автора этого поста. Остальные пользователи должны перенаправляться на страницу просмотра поста.При генерации страницы передайте в контекст переменную form
, в ней должно быть два поля: text
и group
.
Для страницы редактирования поста должен применяться тот же HTML-шаблон, что и для страницы создания нового поста: posts/create_post.html.Шаблон потребуется немного усложнить:
- при редактировании поста заголовок «Добавить запись» должен заменяться на «Редактировать запись»;
- надпись на кнопке отправки формы тоже должна зависеть от операции: «Добавить» для новой записи и «Сохранить» — для редактирования.
Для этого из view-функции post_edit()
передавайте в шаблон posts/create_post.html дополнительную переменную контекста is_edit
; проверяйте эту переменную и изменяйте вид элементов в зависимости от результатов проверки.
<button type="submit" class="btn btn-primary">
{% if is_edit %}
Сохранить
{% else %}
Добавить
{% endif %}
</button>