Представления Django auth PasswordReset не работают при размещении в других приложениях

Система входа/выхода для LoginView и LogoutView работает нормально. Однако система сброса пароля для PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, PasswordResetCompleteView вызывает ошибку.

accounts.urls:

from django.urls import path
from django.contrib.auth import views as auth_views

app_name = 'accounts'
urlpatterns = [
    path('login/', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='accounts/logout.html'), name='logout'),

    path(
        'password-reset/',
        auth_views.PasswordResetView.as_view(template_name='accounts/password_reset.html'),
        name='password_reset'
    ),
    path(
        'password-reset/done/',
        auth_views.PasswordResetDoneView.as_view(template_name='accounts/password_reset_done.html'),
        name='password_reset_done'
    ),
    path(
        'password-reset-confirm/<uidb64>/<token>/',
        auth_views.PasswordResetConfirmView.as_view(template_name='accounts/password_reset_confirm.html'),
        name='password_reset_confirm'
    ),
    path(
        'password-reset-complete/',
        auth_views.PasswordResetCompleteView.as_view(template_name='accounts/password_reset_complete.html'),
        name='password_reset_complete'
    ),
]

Ошибка:

NoReverseMatch at /accounts/password-reset/

Error during template rendering
In template C:\Users\Hp\Documents\Working\Personal\django\venv_socialmedia\lib\site-packages\django\contrib\admin\templates\registration\password_reset_email.html, error at line 6

5   {% block reset_link %}
6   {{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
7   {% endblock %}

При более внимательном рассмотрении, особенно {% url 'password_reset_confirm' uidb64=uid token=token %} (код из файла в виртуальной среде), я понял, что он не учитывает приложение моих учетных записей. Я перенес 4 path, относящиеся к сбросу пароля, в свое main_project.urls, тем самым решив проблему.

Несмотря на то, что сброс пароля работает, я на самом деле хотел вернуть все 4 сброса пароля path обратно в accounts.urls. Причина этого в том, чтобы соответствовать принципу django plug-and-play apps. Я не совсем уверен, хорошая или плохая это идея для сброса пароля.

Несколько решений, которые я имею в виду, следующие:

  1. Отредактируйте файл/ы шаблонов в виртуальной среде venv_socialmedia\lib\site-packages\django\contrib\admin\templates\registration.
  2. Создайте новые представления, которые наследуются от django.contrib.auth.views и переопределяют шаблоны, скопированные из каталога venv_socialmedia\lib\site-packages\django\contrib\admin\templates\registration
  3. .

Упомянутые мною решения, похоже, требуют много работы, однако кажется, что проблема может быть решена с помощью небольших изменений в коде/настройках. Есть ли другие возможные решения?

Вернуться на верх