【问题标题】:django.urls.exceptions.NoReverseMatch: Reverse for 'activate' with keyword argumentsdjango.urls.exceptions.NoReverseMatch:使用关键字参数反转“激活”
【发布时间】:2021-12-28 15:37:25
【问题描述】:

由于以下错误,我无法注册新用户:

django.urls.exceptions.NoReverseMatch: Reverse for 'activate' with keyword arguments '{'uid64': 'Mjk', 'token': 'aydhbh-1b0354ce0dd3df37193a6f22e95b0c4e'}' not found. 1 pattern(s) tried: ['account/activate/(?P<uidb64>[-a-zA-Z0-9_]+)/(?P<token>[-a-zA-Z0-9_]+)/$']

urls.py:

urlpatterns = [
    path('register/', views.account_register, name='register'),
    path('activate/<slug:uidb64>/<slug:token>/', views.account_activate, name='activate'),
    # User dashboard
    path('dashboard/', views.dashboard, name='dashboard'),
    ]

views.py:

def account_register(request):

    if request.method == 'POST':
        registerForm = RegistrationForm(request.POST)
        if registerForm.is_valid():
            user = registerForm.save(commit=False)
            user.email = registerForm.cleaned_data['email']
            user.set_password(registerForm.cleaned_data['password'])
            user.is_active = False
            user.save()
            # Setup email
            current_site = get_current_site(request)
            subject = 'Active your account'
            message = render_to_string('account/registration/account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': account_activation_token.make_token(user),
            })
            user.email_user(subject=subject, message=message)
            return HttpResponse('Registered successfully and activation sent')
    else:
        registerForm = RegistrationForm()
    return render(request, 'account/registration/register.html', {'form': registerForm})


def account_activate(request, uidb64, token):
    try:
        uid = force_text(urlsafe_base64_encode(uidb64))
        user = UserBase.objects.get(pk=uid)
    except(TypeError, ValueError, OverflowError, user.DoesNotExist):
        user = None
    if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        user.save()
        login(request, user)
        return redirect('account:dashboard')
    else:
        return render(request, 'account/registration/activation_invalid.html')

account_activation_email.html:

{% autoescape off %}
Hi {{ user.user_name }},

    Your account has been successfully created. Please click below link to activate your account.

    http://{{ domain }}{% url 'account:activate' uid64=uid token=token %}
{% endautoescape %}

新用户已注册到数据库,但您可以看到错误error image 各位知道有什么问题吗?任何帮助表示赞赏!

【问题讨论】:

  • 你缺少逗号:{% url 'account:activate' uid64=uid,token=token %}

标签: python-3.x django


【解决方案1】:

你打错了第一个 slug 名称:

urlpatterns = [
        Path ('activate / <slug: uidb64> / <slug: token> /', views.account_activate, name = 'enable'),
]

slug 的名字是uidb64,但在account_activation_email.html 中你尝试分配uid64‍‍‍

将 URL 中的 uidb64 重命名为 uid64

urlpatterns = [
        Path ('activate / <slug: uid64> / <slug: token> /', views.account_activate, name = 'enable'),
]

【讨论】:

  • 我怎么能错过!非常感谢!
猜你喜欢
  • 2020-12-31
  • 2019-10-03
  • 2020-04-21
  • 2020-02-18
  • 1970-01-01
  • 2020-08-12
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多