Exemple #1
0
class UserProfileView(TemplateView):
    template_name = 'users/profile.html'

    def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated() and request.user.pk == int(kwargs['user_id']):
            self.user = request.user
        else:
            self.user = get_object_or_404(User, pk=kwargs['user_id'])
        self.wall_post_form = WallPostForm(request.POST or None)
        return super(UserProfileView, self).dispatch(request, *args, **kwargs)

    def get_wall_posts(self):
        paginator = Paginator(self.user.wall_posts.select_related('author'), 10)
        page = self.request.GET.get('page')
        try:
            posts_on_wall = paginator.page(page)
        except PageNotAnInteger:
            posts_on_wall = paginator.page(1)
        except EmptyPage:
            posts_on_wall = paginator.page(paginator.num_pages)
        return posts_on_wall

    def get_context_data(self, **kwargs):
        context = super(UserProfileView, self).get_context_data(**kwargs)
        context['profile_user'] = self.user
        context['posts_on_wall'] = self.get_wall_posts()
        context['wall_post_form'] = self.wall_post_form
        if self.request.user != self.user:
            context['is_my_friend'] = User.friendship.are_friends(self.request.user, self.user)
        return context

    def post(self, request, *args, **kwargs):
        if self.wall_post_form.is_valid():
            post = self.wall_post_form.save(commit=False)
            post.user = self.user
            post.author = request.user
            post.save()
            messages.success(request, _(u'Повідомлення успішно опубліковано'))
            return redirect(request.path)
        return self.get(request, *args, **kwargs)