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 в контексте, который может использовать шаблон регистрации.

Другие вопросы по тегам