Обратное для 'password_reset_done' с аргументами с пространством имен - PullRequest
0 голосов
/ 08 июня 2018

Под Джанго 1.8.Я добавил пространство имен в свое приложение, но теперь у меня проблемы с страницами регистрации.

URL: http://127.0.0.1:8000/accounts/password_reset/

в myapp / urls.py:

  ...
  from django.contrib.auth.views import password_reset, password_reset_done
  ...

  # include registration app urls 
  url(r'^accounts/', include('registration.urls')),


  url(r'^accounts/password_reset/$', password_reset,
      {'template_name': 'registration/password_reset.html'},
      name='reset-password'),

  url(r'^accounts/password_reset_success/$', password_reset_done,
       {'template_name': 'registration/password_reset_done.html'},
       name="password_reset_done"),

Ошибка:

NoReverseMatch at /accounts/password_reset/
Reverse for 'password_reset_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

В проекте / urls / myapp.py:

url(r'^', include('myapp.urls',
    namespace='myapp', app_name='myapp')),

в django.contrib.auth.views password_reset:

Если я заменю

if post_reset_redirect is None:
    post_reset_redirect = reverse('password_reset_done')
else:
    post_reset_redirect = resolve_url(post_reset_redirect)
if request.method == "POST":

** на **

if post_reset_redirect is None:
    post_reset_redirect = reverse('myapp:password_reset_done')
else:
    post_reset_redirect = resolve_url(post_reset_redirect)
if request.method == "POST":

Это работает.

Так что я думаю, что мне нужно где-то передать пространство имен URL-адресам регистраций.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

При использовании представления на основе классов изменяется имя параметра, необходимо использовать success_url:

    path(
    '/password/reset/',
    auth_views.PasswordResetView.as_view(
        template_name='registration/password_reset.html',
        success_url=reverse_lazy('account:password-reset-done')),
    name='password-reset'),
0 голосов
/ 08 июня 2018

Вы можете установить пользовательский post_reset_redirect в конфигурации URL, если включите представление password_reset:

url(r'^accounts/password_reset/$', password_reset,
  {'template_name': 'registration/password_reset.html', 'post_reset_redirect': reverse_lazy('myapp:password_reset_done')},
  name='reset-password'),

Однако, я думаю, вы обнаружите, что при использованииПространство имен требует изменений и в других частях процесса сброса пароля (например, шаблон электронной почты).Самое простое решение - не использовать пространство имен для этого приложения.

...