У меня есть следующее в моем корневом модуле URLconf (есть больше, но не важно, поэтому опущено):
urlpatterns = [
re_path(r'^password-reset-redirect-view/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
password_reset_redirect,
name = 'password_reset_confirm'),
path('', include('search.urls')),
path('', include('customer_portal.urls')),
path('rest-auth/', include('rest_auth.urls')),
path('rest-auth/registration/', include('rest_auth.registration.urls')),
Вот customer_portal.urls :
urlpatterns = [
path('customer/contact/', views.contact),
path('', views.home),
re_path(r"^confirm-email/(?P<key>[-:\w]+)/$", views.email_verification,
name="account_confirm_email"),
]
Вот rest_auth.registration.urls :
urlpatterns = [
url(r'^$', RegisterView.as_view(), name='rest_register'),
url(r'^verify-email/$', VerifyEmailView.as_view(), name='rest_verify_email'),
url(r'^account-confirm-email/(?P<key>[-:\w]+)/$', TemplateView.as_view(),
name='account_confirm_email'),
]
Как вы видите, оба включенных urls.py urlpatterns имеют представление с именем account_confirm_email.
Где-то в коде это выполняется:
url = reverse(
"account_confirm_email",
args=[emailconfirmation.key])
Поскольку customer_portal.urls
включен до rest_auth.registration.urls
, я ожидаю, что маршрут account_confirm_email
в customer_portal.urls
будет возвращен вышеупомянутым reverse
метод.Но вместо этого я получаю rest_auth.registration.urls
маршрутный URL.
Просто чтобы быть уверенным, что я закомментировал маршрут в rest_auth.registration.urls
, а затем я получил правильный URL (customer_portal URL).
Это заполнено в электронном письме, я проверяю это электронное письмо и вижу, что у меня есть требуемый URL: http://127.0.0.1:8000/confirm-email/......./
вместо: http://127.0.0.1:8000/rest-auth/registration/account-confirm-email/...../
Может кто-нибудь сказать мне, почему customer_portal
URL не является обратным в обоих случаях?
Документы Django говорят:
Django просматривает каждый шаблон URL по порядку и останавливается на первом, который соответствуетзапрошенный URL.