猿问

注销反向网址不适用于下一页

在我看来,我正在检查拥有特定电子邮件地址的用户是否是经过身份验证的用户。如果没有,我想重定向到注销,然后使用相同的 URL 登录。这是我的观点:


class VerifyUserEmailAddressView(LoginRequiredMixin, SingleObjectMixin, generic.View):

    model = UserEmailAddress

    success_url = reverse_lazy('accounts:edit_profile_emails')


    def get(self, request, *args, **kwargs):

        email_address = self.get_object()

        if (not (email_address.user == self.request.user)):

            return redirect(to='accounts:logout', **{'next_page': self.request.get_full_path()}) # This is the line that causes the exception.

        assert (email_address.user == self.request.user)

        ...

这是我的注销视图:


class LogoutView(django_auth_views.LogoutView):

    template_name = 'accounts/logged_out.html'

但问题是,我得到一个例外:


django.urls.exceptions.NoReverseMatch: Reverse for 'logout' with keyword arguments '{'next_page': '/edit-profile/emails/95209103364882328130/verify/64435189922652686051/'}' not found. 1 pattern(s) tried: ['logout\\/$']

urls.py:


urlpatterns = [

    path(route='login/', view=views.LoginView.as_view(), name='login'),

    path(route='logout/', view=views.LogoutView.as_view(), name='logout'),


    path(route='edit-profile/emails/', view=views.EditProfileEmailsView.as_view(), name='edit_profile_emails'),

    path(route='edit-profile/emails/<digits:pk>/verify/<str:token>/', view=views.VerifyUserEmailAddressView.as_view(), name='verify_email'),

]

我该如何解决这个问题?


慕姐4208626
浏览 115回答 1
1回答

噜噜哒

我假设next_page是URL 查询参数而不是URL 参数如果是这样,您必须生成一个类似于以下内容的 URL,/account/logout/?next=/foo/bar/somewhere/为此,请将您的重定向语句替换为,from django.urls import reversereturn redirect('{}?next={}'.format(reverse('accounts:logout'), self.request.get_full_path()))
随时随地看视频慕课网APP

相关分类

Python
我要回答