Python: Как вернуть переменные из функции и собрать контекст уже непосредственно в функции
Я вынес в в функцию page_paginator
процесс пагинации и далее с помощью метода update
добавляю в другие функции его атрибуты к контексту. Мне необходимо вернуть из функции page_paginator
результат и присвоить его в переменную, а затем эту переменную положит в словарь context
. Помогите разобрать эту ситуацию и сделать? Честно говоря я уже немного запутался, учу питон недавно.
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.shortcuts import render, get_object_or_404, redirect
from posts.forms import PostForm
from posts.models import Post, Group, User
POSTS_PER_PAGE = 10
def page_paginator(queryset, request):
"""Вынесение процесса пагинации в отдельный метод"""
paginator = Paginator(queryset, POSTS_PER_PAGE)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return {
'paginator': paginator,
'page_number': page_number,
'page_obj': page_obj,
}
def index(request):
"""Шаблон главной страницы"""
posts = Post.objects.select_related('group', 'author')
context = page_paginator(posts, request)
return render(request, 'posts/index.html', context)
def group_posts(request, slug):
"""Шаблон с группами постов"""
group = get_object_or_404(Group, slug=slug)
posts = group.posts.all()
context = {
'group': group,
'posts': posts,
}
context.update(page_paginator(posts, request))
return render(request, 'posts/group_list.html', context)
def profile(request, username):
"""Шаблон профайла пользователя"""
author = get_object_or_404(User, username=username)
posts = author.posts.all()
context = {
'author': author,
'posts': posts,
}
context.update(page_paginator(posts, request))
return render(request, 'posts/profile.html', context)
def post_detail(request, post_id):
"""Шаблон отдельного поста"""
post = get_object_or_404(Post, pk=post_id)
author = Post.objects.select_related('group','author')
context = {
'post': post,
'author': author
}
return render(request, 'posts/post_detail.html', context)
@login_required
def post_create(request):
"""Создание нового поста"""
form = PostForm(request.POST or None)
if request.method == 'POST' and form.is_valid():
post = form.save(commit=False)
post.author = request.user
form.save()
return redirect('posts:profile', request.user)
return render(request, 'posts/create_post.html', {'form': form})
def post_edit(request, post_id):
"""Эта функция редактирует пост по id и сохраняет его в БД"""
post = get_object_or_404(Post, id=post_id)
if request.user.id != post.author.id:
return redirect('posts:post_detail', post_id=post_id)
form = PostForm(data=request.POST or None, instance=post)
if request.method == 'POST' and form.is_valid():
form.save()
return redirect('posts:post_detail', post_id)
context = {
'form': form,
'is_edit': True,
'post': post,
}
return render(request, 'posts/create_post.html', context)