django-registration - перенаправление на форму регистрации и отображение сообщения
После успешной регистрации пользователь перенаправляется в шаблон 'registration_complete.html'.
Есть ли способ изменить это поведение, чтобы перенаправить пользователя на страницу регистрации и отобразить сообщение?
Я думал сделать что-то вроде этого в registration_complete.html:
{% include 'registration/registration_form.html' with message='Your account has been created. Please check your email for activation instructions' %}
Но form
Переменная, которую я использую в шаблоне, недоступна в этом представлении, поэтому форма регистрации не отображается. Кроме того, я не знаю, является ли это лучшим способом сделать это.
РЕДАКТИРОВАТЬ:
url(r'^register/$', 'registration.views.register',
{
'backend': 'trabam.apps.accounts.regbackend.Backend',
'form_class' : UserRegistrationForm,
'success_url': '/accounts/register'
},
name='registration_register'
),
Как я могу установить сообщение в своем шаблоне после завершения регистрации?
2 ответа
Вы можете указать success_url, который будет перенаправлять пользователя на этот URL при успешной регистрации.
Для отображения сообщения простым подходом было бы также добавить параметр get в success_url, но вы должны изменить представление, чтобы получить его из request.GET и поместить в контекст запроса.
в urls.py:
url(r'^register/$', 'registration.views.register',
{
'backend': 'trabam.apps.accounts.regbackend.Backend',
'form_class' : UserRegistrationForm,
'success_url': '/accounts/register/?on_success=true'
},
name='registration_register'
),
ввиду:
on_success = request.GET.get('on_success', None)
context.update({'on_success': on_success})
в шаблоне:
{% if on_success %}
<p>You are successfully registered</p>
{% endif %}
Из вашего urls.py кажется, что вы отправляете success_url
как register
посмотреть сам. Вы не можете сделать это, потому что это потребует от вас изменить register
посмотреть, если вы хотите отправить message
в контексте после успешной регистрации.
Итак, вам нужно написать дополнительный вид. Предположим, этот файл accounts/views.py
,
from registration.forms import RegistrationForm
def registration_complete(request):
.....
form = RegistrationForm()
.....
message = "You are successfully registered"
return render_to_response("registration/registration_form.html", {'form': form, 'message': message})
Шаблон registration/registration_form.html
это то же самое, что будет использоваться django-registration
,
accounts/urls.py
url(r'^registration_complete/', 'accounts.views.registration_complete', name='accounts_registration_complete'),
Ваш urls.py
urlpatterns = patterns('',
(r'^registration/register/$', 'registration.register', {'backend': 'registration.backends.default.DefaultBackend', 'success_url': 'accounts_registration_complete'}),
(r'^registration/', include('registration.urls')),)
registration/registration_form.html
{% if message %}
{{message}}
{% endif %}
.......
{{form.as_p}}
Итак, только после успешной регистрации, ваш success_url
будет использоваться, который будет вызывать вид registration_complete
определяется вами. Это представление отправит message
в контексте, который может использовать шаблон регистрации.