重定向视图中的 Django NoReverseMatch 错误
Posted
技术标签:
【中文标题】重定向视图中的 Django NoReverseMatch 错误【英文标题】:Django NoReverseMatch error in RedirectView 【发布时间】:2020-06-11 02:17:53 【问题描述】:我一直在尝试为我的网站创建关注功能,但是我一直遇到错误。 这是 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/
未找到带有关键字参数“'slug': 'don0024'' 的“view_profile_with_pk”的反向操作。尝试了 1 种模式:['mainapp/profile/(?P[^/]+)/$']
以及完整的追溯
环境:
请求方法:GET 请求 URL: http://127.0.0.1:8000/mainapp/profile/don0024/add/
追溯:
文件 “C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\core\handlers\exception.py” 在内部 34. response = get_response(request)
文件 “C:\Users\User.virtualenvs\interests-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\interests-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\interests-site-Ho6yLlHE\lib\site-packages\django\views\generic\base.py” 在视野中 71. return self.dispatch(request, *args, **kwargs)
文件 “C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\views\generic\base.py” 在调度中 97. return handler(request, *args, **kwargs)
文件 “C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\views\generic\base.py” 在得到 188. url = self.get_redirect_url(*args, **kwargs)
文件“C:\Users\User\interests-site\interests\mainapp\views.py”在 get_redirect_url 227. url_ = obj.get_absolute_url()
文件“C:\Users\User\interests-site\interests\mainapp\models.py”在 get_absolute_url 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, **kwargs))
文件 “C:\Users\User.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\urls\resolvers.py” 在 _reverse_with_prefix 673. raise NoReverseMatch(msg)
异常类型:NoReverseMatch at /mainapp/profile/don0024/add/ 异常值:使用关键字反转“view_profile_with_pk” 未找到参数''slug':'don0024''。尝试了 1 种模式: ['mainapp/profile/(?P[^/]+)/$']
如果有很多代码和错误,我很抱歉,但任何帮助都会很棒
【问题讨论】:
你也可以显示view_profile_with_pk
的网址吗?
用另一个网址添加了它
【参考方案1】:
您错误地将 kwargs 传递给 reverse 函数。这是将用户名传递到view_profile_with_pk
url 的正确方法。
kwargs =
'username': self.user.username,
return reverse('mainapp:view_profile_with_pk',kwargs=kwargs)
【讨论】:
我这样做了,但是我现在收到一个 404 错误,提示该页面不存在 您能否检查view_profile
函数以确保正确渲染。还请提供完整的追溯。
你不会相信,但现在它可以正常工作,但它没有在数据库中更新。它重定向,然后就是这样。它不会将用户添加到 manytomanyfield
我不确定你的模型的关系和你的保存方法,所以我无法猜测。
啊抱歉我原来忘了做【参考方案2】:
您必须在get_absolute_url
中设置kwargs
,如下所示...
kwargs =
'username':self.user.username,
因为您在 urls.py 中设置了 username
,而不是 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>
。
【讨论】:
以上是关于重定向视图中的 Django NoReverseMatch 错误的主要内容,如果未能解决你的问题,请参考以下文章
当表单操作设置为“。”时,Django 重定向到不同的视图。
使用 Django 和 AllAuth 登录后不重定向到我自己的视图