python - 重定向视图中的 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[^/]+)/$']
如果这是很多代码和错误,我很抱歉,但任何帮助都会很棒
解决方案
您错误地将 kwargs 传递给 reverse 函数。这是将用户名传递到view_profile_with_pk
url 的正确方法。
kwargs = {
'username': self.user.username,
}
return reverse('mainapp:view_profile_with_pk',kwargs=kwargs)
推荐阅读
- laravel - Laravel Eloquent 查询以检查学生有多少兄弟姐妹
- localization - 从一个Material App切换到另一个Material App时会出现短时间黑屏
- r - 更改 dotplot_geom 的填充颜色,但保留箱线图的填充颜色
- docker - 将 aws 凭据传递给 Docker
- python - 如何在颜色栏的顶部和底部添加按钮
- android - 从 Room 数据库的多个表中搜索记录
- google-colaboratory - 如何在 Google Colab 中下载 json Dataframe?
- excel - 根据范围内的结果更改excel中单元格的值
- javascript - 文本文档仅加载 Internet Explorer 前标记中的第一行
- android - 当动画活动在android中移动时如何只锁定工具栏?