首页 > 解决方案 > 重定向视图中的 Django NoReverseMatch 错误

问题描述

我一直在尝试为我的网站制作关注功能,但是我一直陷入错误。这是 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>

这是我的错误

/mainapp/profile/don0024/add/ 处的 NoReverseMatch

未找到关键字参数“{'slug': 'don0024'}' 的“view_profile_with_pk”的反向操作。尝试了 1 种模式:['mainapp/profile/(?P[^/]+)/$']

以及完整的追溯

环境:

请求方式:GET 请求网址: http: //127.0.0.1 :8000/mainapp/profile/don0024/add/

追溯:

内部 34 中的文件“C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\core\handlers\exception.py”。 response = get_response(request)

_get_response 115 中的文件“C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\core\handlers\base.py”。response = self.process_exception_by_middleware(e, request)

_get_response 113 中的文件“C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\core\handlers\base.py”。 response = Wrapped_callback(request, *callback_args, **callback_kwargs)

视图 71 中的文件“C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\views\generic\base.py”。 return self.dispatch(request, *args, **kwargs )

调度 97 中的文件“C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\views\generic\base.py”。返回处理程序(请求,*args,**kwargs)

获取 188 中的文件“C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\views\generic\base.py”。 url = self.get_redirect_url(*args, **kwargs)

get_redirect_url 227 中的文件“C:\Users\User\interests-site\interests\mainapp\views.py”。 url_ = obj.get_absolute_url()

get_absolute_url 中的文件“C:\Users\User\interests-site\interests\mainapp\models.py” 72. return reverse('mainapp:view_profile_with_pk',kwargs=kwargs)

文件 "C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\urls\base.py" 在反向 90. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, * *夸克))

_reverse_with_prefix 673 中的文件“C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\urls\resolvers.py”. raise NoReverseMatch(msg)

异常类型:NoReverseMatch at /mainapp/profile/don0024/add/ 异常值:“view_profile_with_pk”的反向关键字参数“{'slug':'don0024'}”未找到。尝试了 1 种模式:['mainapp/profile/(?P[^/]+)/$']

如果这是很多代码和错误,我很抱歉,但任何帮助都会很棒

标签: pythondjangopython-3.xdjango-modelsdjango-views

解决方案


您错误地将 kwargs 传递给 reverse 函数。这是将用户名传递到view_profile_with_pkurl 的正确方法。

kwargs = {
    'username': self.user.username,
}
return reverse('mainapp:view_profile_with_pk',kwargs=kwargs)

推荐阅读