Exemple #1
0
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
        })
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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
    })
Exemple #5
0
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
    })
Exemple #6
0
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
    })
Exemple #7
0
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)
Exemple #8
0
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)