注册时的 NoReverseMatch - Django

NoReverseMatch at register - Django

我正在尝试向我的 Django 项目添加电子邮件确认功能。 我已经创建了一个视图和一个 url,但我现在收到此错误:

Reverse for 'activate' with keyword arguments '{'uidb64': 'MzA', 'token': '55y-fec02444935d88a056dc'}' not found. 1 pattern(s) tried: ['activate/<uidb64:\[0\-9A\-Za\-z_\\\-\]\+\)>/<token:\[0\-9A\-Za\-z\]\{1,13\}\-\[0\-9A\-Za\-z\]\{1,20\}\)/\$>\)/$']

我觉得错误应该在url,这里是:

path('activate/<uidb64:[0-9A-Za-z_\-]+)>/<token:[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$>)/', views.activate, name='activate'),

我是否以错误的方式声明它?提前致谢

您的 path call looks like a mixture of typical path patterns, and re_path(正则表达式)语法,使其非常 "strange"。

您可能想要定义如下内容:

from django.urls import <b>re_path</b>

# ...

<b>re_path</b>(<b>r</b>'^activate/(<b>?P<uidb64></b>[0-9A-Za-z_\-]+)/(<b>?P<token></b>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', views.activate, name='activate'),

所以调用 re_path,然后用 (?P<variablename>pattern).

定义变量

你可以这样使用它:

path('activate/<str:uidb64>/<str:token>/', views.activate, name='activate')

(此部分可能与您的 noreversematch 错误无关) 此外,当您要使用 reverse 时,请确保为每个关键字参数发送正确的值。根据你的问题,我假设它们是不正确的(也许 token 的值属于 uidb64uidb64 的值属于 token)。如果是这样,那么请像这样调用反向:

reverse('activate', kwargs={'token':'MzA', 'uid64': '55y-fec02444935d88a056dc'})

或在网址中:

{% url 'activate' token='MzA' uid64='55y-fec02444935d88a056dc' %}