def profile(request, username): author = get_object_or_404(User, username=username) posts = Post.objects.select_related('author', 'group')\ .filter(author=author)\ .order_by("-pub_date")\ .all().annotate(comment_count=Count('comments')) page, paginator = get_pagination_info(request=request, posts=posts) following = True # try необходим, т.к. user может быть анонимусом try: if not Follow.objects.filter(author=author, user=request.user): following = False except: pass return render( request, 'profile.html', { 'page': page, 'paginator': paginator, 'author': author, 'profile': author, 'following': following })
def favorite_index(request): # получаем теги и фильтр по ним tags, tags_filter = get_tags(request) # выгружаем рецепты в избранном у авторизованного пользователя recipes = (Recipe.objects.favorites( user=request.user).select_related('author')) if tags_filter: recipes = recipes.filter(tags_filter) title = 'Избранное' template = 'favorite_index.html' items_on_page = 3 # получаем пагинатор и номер страницы page, paginator = get_pagination_info(request, recipes, per_page=items_on_page) context = { 'page': page, 'paginator': paginator, 'tags': tags, 'title': title, } return render(request, template, context)
def profile_index(request, username): # получаем теги и фильтр по ним tags, tags_filter = get_tags(request) recipes = Recipe.objects.select_related('author') if tags_filter: recipes = recipes.filter(tags_filter) author = get_object_or_404(User, username=username) recipes = recipes.filter(author=author) title = author.get_full_name() template = 'profile_index.html' # получаем пагинатор и номер страницы page, paginator = get_pagination_info(request, recipes) context = { 'page': page, 'paginator': paginator, 'tags': tags, 'title': title, 'author': author } return render(request, template, context)
def follow_index(request): follows = Follow.objects.filter(user=request.user) following_authors = [follow.author for follow in follows ] # .filter(author__following__user=request.user) related_posts = Post.objects.select_related('author', 'group') \ .filter(author__in=following_authors) \ .order_by("-pub_date") \ .all() \ .annotate(comment_count=Count('comments')) page, paginator = get_pagination_info(request, posts=related_posts) return render(request, "follow.html", { 'page': page, 'paginator': paginator, 'following': True })
def group_posts(request, slug): # функция get_object_or_404 позволяет получить объект из базы данных # по заданным критериям или вернуть сообщение об ошибке если объект не найден group = get_object_or_404(Group, slug=slug) # Метод .filter позволяет ограничить поиск по критериям. Это аналог добавления # условия WHERE group_id = {group_id} related_posts = Post.objects.select_related('author', 'group') \ .filter(group=group) \ .order_by("-pub_date") \ .all() \ .annotate(comment_count=Count('comments')) page, paginator = get_pagination_info(request, posts=related_posts) return render(request, "group.html", { "group": group, "page": page, "paginator": paginator })
def index(request): # получаем результат из нашей БД related_posts = Post.objects.select_related('author', 'group') \ .order_by('-pub_date') \ .all() \ .annotate(comment_count=Count('comments')) page, paginator = get_pagination_info(request, posts=related_posts) # проверяем, подписан ли на кого-то пользователь following = True if request.user.is_authenticated: if not Follow.objects.filter(user=request.user): following = False return render(request, 'index.html', { 'page': page, 'paginator': paginator, 'following': following })
def subscription_index(request): authors = (User.objects.filter( followers__user=request.user).prefetch_related('recipes')) title = 'Мои подписки' template = 'subscription_index.html' items_on_page = 3 # получаем пагинатор и номер страницы page, paginator = get_pagination_info(request, authors, per_page=items_on_page) context = { 'page': page, 'paginator': paginator, 'title': title, } return render(request, template, context)
def index(request): # получаем теги и фильтр по ним tags, tags_filter = get_tags(request) recipes = Recipe.objects.select_related('author') if tags_filter: recipes = recipes.filter(tags_filter) title = 'Рецепты' template = 'index.html' author = None # получаем пагинатор и номер страницы page, paginator = get_pagination_info(request, recipes) context = { 'page': page, 'paginator': paginator, 'tags': tags, 'title': title, 'author': author } return render(request, template, context)