Передача пользовательского шаблона HTML не работает с паролем сброса в Django - PullRequest
0 голосов
/ 07 июля 2019

Я реализую страницу сброса для моего приложения django. Все работает нормально, если я использую auth_views.PasswordResetView.as_view (), не передавая template_name. Он использует стандартные шаблоны, предоставленные django, и я получаю подтверждение по электронной почте и пароль успешно сброшен, но я хочу передать свой собственный шаблон, который имеет простую форму с изображением и одним входным тегом для электронной почты. Представление отображается нормально, но когда я нажимаю «Отправить», в консоли отображается только 1 запрос на публикацию.

Я попытался реализовать каталог регистрации, поскольку в исходном коде он использует это, но пока не повезло. Я также изменил ввод на кнопку для отправки. Я также пытался удалить дополнительные классы стилей для CSS.

Я использую следующий путь для сброса страницы.

path('login/password-reset/',
        auth_views.PasswordResetView.as_view(),
        name = 'password_reset' ),

Передача следующего генерирует представление, но когда я отправляю электронное письмо, оно не возвращает меня к reset_done.

 path('login/password-reset/',
        auth_views.PasswordResetView.as_view(template_name = 'login/password_reset_form.html'),
        name = 'password_reset' ),

Остальные мои URL следующие:

path('login/password-reset/done',
        auth_views.PasswordResetDoneView.as_view(),
        name = 'password_reset_done' ),   
path('login/password-reset-confirm/<uidb64>/<token>/',
        auth_views.PasswordResetConfirmView.as_view(),
        name = 'password_reset_confirm' ),      
path('login/password-reset-complete/',
        auth_views.PasswordResetCompleteView.as_view(),
         name='password_reset_complete'),    

шаблон находится здесь:

<form method="POST" class="register-form" id="login-form" action= '' >
{% csrf_token %}
<div class="form-group">
    <label for="your_name">Enter registered email</label>
    <input type="text" name="your_name" id="your_name" placeholder="Email"/>
</div>
<div class="form-group">
    <input type="submit" name="signin" id="signin" class="form-submit" value="Reset"/>
</div>
</form>

Буду признателен за любую помощь!

1 Ответ

1 голос
/ 07 июля 2019

Ваш пользовательский шаблон имеет следующие данные:

<input type="text" name="your_name" id="your_name" placeholder="Email"/>

Что недопустимо, потому что PasswordResetForm в Django ожидает поле, name которого равно email, а не your_name. Таким образом, форма не будет проверена, и представление повторно отобразит форму с ошибками. Вам нужно использовать что-то вроде:

<input type="text" name="email" id="id_email" placeholder="Email"/>

Еще лучше не визуализировать поле самостоятельно, а позволить Джанго визуализировать его с помощью:

{{ form.email.errors }}
{{ form.email }}

... так что вы не жестко кодируете имена полей. Кроме того, вы не отображали ошибки формы, поэтому вы не понимали, что форма недействительна.

...