Django Ошибка NoReverseMatch в RedirectView - PullRequest
0 голосов
/ 27 февраля 2020

Я пытался создать функцию отслеживания для своего сайта, однако я постоянно зацикливаюсь на ошибках. Вот модель UserProfileInfo

slug = models.SlugField(unique=True,allow_unicode=True)
# ... other fields

def get_absolute_url(self):
        kwargs = {
            'slug':self.user.username,
        }
        return reverse('mainapp:view_profile_with_pk',kwargs=kwargs)
        # return reverse('mainapp:post_list')

    def save(self, *args, **kwargs):
        self.slug = slugify(self.user.username)
        super().save(*args, **kwargs)

Вот мой взгляд

class AddFriendRedirect(RedirectView):
    def get_redirect_url(self,*args,**kwargs):
        slug = self.kwargs.get("slug")
        obj = get_object_or_404(UserProfileInfo,slug=slug)
        # user_profile = User.objects.get(username=username)
        url_ = obj.get_absolute_url()
        user = self.request.user
        if user.is_authenticated:
            if user in obj.friends.all():
                obj.friends.remove(user)
            else:
                obj.friends.add(user)
        return url_

Вот мой urls.py

path('profile/<str:username>/',views.view_profile,name='view_profile_with_pk'), # this one is the profile one
path('profile/<str:slug>/add/',views.AddFriendRedirect.as_view(),name='add_friend'),

И наконец вот мой HTML

<a id="new-post" href="{% url 'mainapp:add_friend' slug=username %}">
        <button id="">
            Connect
        </button>

И вот моя ошибка

NoReverseMatch в / mainapp / profile / don0024 / add /

Обратное для 'view_profile_with_pk' с аргументами ключевого слова '{ 'slug': 'don0024'} 'не найден. Попробован 1 шаблон (ов): ['mainapp / profile / (? P [^ /] +) / $']

И полный возврат

Среда:

Метод запроса: GET URL запроса: http://127.0.0.1: 8000 / mainapp / profile / don0024 / add /

Трассировка:

Файл "C: \ Users \ User.virtualenvs \oples-site-Ho6yLlHE \ lib \ site-packages \ django \ core \ handlers \ exception.py "во внутреннем 34. response = get_response (запрос)

File" C: \ Users \ User.virtualenvs \ Interest-site-Ho6yLlHE \ lib \ site-packages \ django \ core \ handlers \ base.py "в _get_response 115. response = self.process_exception_by_middleware (e, request)

Файл "C: \ Users \ User.virtualenvs \ Interest-site-Ho6yLlHE \ lib \ site-packages \ django \ core \ handlers \ base.py" в _get_response 113. response = wrapped_callback (request, * callback_args , ** callback_kwargs)

Файл "C: \ Users \ User.virtualenvs \ Interest-site-Ho6yLlHE \ lib \ site-packages \ django \ views \ generic \ base.py" в представлении 71. вернуть self.dispatch (запрос, * args, ** kwargs)

Файл "C: \ Users \ User.virtualenvs \ Interest-site-Ho6yLlHE \ lib \ site-packages \ django \ views \ generic \ base.py" в отправке 97. обработчик возврата (request, * args, ** kwargs)

Файл "C: \ Users \ User.virtualenvs \ Interest-site-Ho6yLlHE \ lib \ site-packages \ django \ views \ generic \ base.py "в get 188. url = self.get_redirect_url (* args, ** kwargs)

Файл" C: \ Users \ User \ Interest-site \ Interest \ mainapp \ views.py "в get_redirect_url 227. url_ = obj.get_absolute_url ()

Файл" C: \ Users \ Пользователь \ интересах \ сайта-интересов \ интересы \ mainapp \ models.py "в get_absolute_url 72. вернуть обратно ('mainapp : view_profile_with_pk ', kwargs = kwargs)

Файл "C: \ Users \ User.virtualenvs \oples-site-Ho6yLlHE \ lib \ site-packages \ django \ urls \ base.py" в обратном порядке 90 . return iri_to_uri (resolver._reverse_with_prefix (view, prefix, * args, ** kwargs))

Файл "C: \ Users \ User.virtualenvs \ Interest-site-Ho6yLlHE \ lib \ site-packages \ django \ urls \ resolvers.py "в _reverse_with_prefix 673. повысить NoReverseMatch (msg)

Тип исключения: NoReverseMatch в / mainapp / profile / don0024 / add / Exception Значение: обратное для 'view_profile_with_pk' с аргументами ключевого слова '{' slug ':' don0024 '}' не найдено. Попробован 1 шаблон (ов): ['mainapp / profile / (? P [^ /] +) / $']

Извините, если много кода и ошибок, но любая помощь будет отличной

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вы неправильно передаете kwargs функции реверса. Вот правильный способ передать имя пользователя в view_profile_with_pk url.

kwargs = {
    'username': self.user.username,
}
return reverse('mainapp:view_profile_with_pk',kwargs=kwargs)
0 голосов
/ 27 февраля 2020

Вы должны установить kwargs в get_absolute_url, как показано ниже ...

kwargs = {
             'username':self.user.username,
         }

Поскольку вы установили username в своем urls.py, а не в slug.

path('profile/<str:username>/',views.view_profile,name='view_profile_with_pk')
path('profile/<slug:slug>/add/',views.AddFriendRedirect.as_view(),name='add_friend'),

Итак, когда он попытается установить slug, он не найдет slug, потому что вы установили <str:username> в своем URL.

...