Ошибка NoReverseMatch при возврате объекта Respose в структуре отдыха django - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь создать клон Instagram.

Нажатие кнопки «Далее» вызывает ajax.

В моем представлении по умолчанию определение сохраняет «следует» и возвращает объект ответа, данные которого имеют значение true / false.значения того, следил ли пользователь ранее.

сообщение об ошибке

‘django.urls.exceptions.NoReverseMatch: Reverse for 'profile' 
with arguments '('',)' not found. 2 pattern(s) tried’

views.py

class ProfileListView(mixins.UpdateModelMixin, generics.GenericAPIView):
    """User post list"""
    renderer_classes = [TemplateHTMLRenderer]
    template_name = 'insta/profile_list.html'
    serializer_class = InstaSerializer
    permission_classes = [permissions.AllowAny]

    def get(self, request, *args, **kwargs):
        target = kwargs.get('username')
        try:
            target_user = USER.objects.get(username=target)
            response = Insta.objects.filter(owner__username=target)
            return Response({'posts': response, 'target_user': target_user})
        except USER.DoesNotExist:
            return HttpResponseRedirect(reverse('insta:dashboard'), status=HTTP_404_NOT_FOUND)

    def post(self, request, *args, **kwargs):
        followed_user = get_object_or_404(USER, username=kwargs.get('username'))

        if request.user.is_authenticated:
            follower_user = request.user
            if followed_user == follower_user:
                raise PermissionError('Unable to follow yourself')
            else:
                if follower_user in followed_user.followers.all():
                    followed_user.followers.remove(follower_user)
                    return Response({
                        'follow_exist': False
                    })
                else:
                    follower_user.follows.add(followed_user)
                    return Response({
                        'follow_exist': True
                    })
        else:
            return redirect('insta/login')

urls.py

path('<username>/', insta_profile, name='profile'),

ajax

$.ajax({
        type: 'POST',
        url: '{% url 'insta:profile' username=target_user.username %}',
        data: {'csrfmiddlewaretoken': '{{ csrf_token }}'},
        success: function (response) {
            if (response.follow_exist) {
                $this.attr('class', 'btn btn-outline-secondary');
                $this.text('cancel follow')
            } else {
                $this.attr('class', 'btn btn-primary');
                $this.text('follow')
            }
         },
         error: function (response) {
            console.log(JSON.stringify(response))
         }
});

Не могли бы вы сказать мне, почему это происходит?

Заранее спасибо.

1 Ответ

0 голосов
/ 19 сентября 2019

добавьте это в вашем исключении

 return HttpResponseRedirect(reverse('insta:dashboard', args=(username,), status=HTTP_404_NOT_FOUND)

вместо

    return HttpResponseRedirect(reverse('insta:dashboard'), status=HTTP_404_NOT_FOUND)

см. это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...