Если вы посмотрите на представление, ответственное за активацию учетной записи по электронной почте ( registration.views.activate ), вы увидите, что оно принимает параметр success_url , который равен " Имя шаблона URL, на который будет перенаправляться при успешной активации. "
Таким образом, вам просто нужно переписать URL, который вызывает это представление, и указать страницу, на которую вы хотите перенаправить.
Так по-вашему urls.py :
from registration.views import activate
urlpatterns = patterns('',
url(r'^activate/(?P<activation_key>\w+)/$',
activate,
{'backend': 'registration.backends.default.DefaultBackend'},
name='registration_activate',
# You could use reverse() here instead of a URL to be DRY'er
success_url = "http://..."
),
В качестве альтернативы вы можете заключить django-регистрации, активировать представление в своем собственном представлении и принять параметр GET для перенаправления на:
from registration.view import activate
def custom_activate(request, backend,
template_name='registration/activate.html',
success_url=None, extra_context=None, **kwargs):
success_url = request.GET.get('next', None)
return activate(request, template_name=template_name, success_url=success_url, extra_context=None, **kwargs)
Теперь в вашем шаблоне registration / activ_email.html вы можете добавить место перенаправления к ссылке:
{% url 'registration.view.activate' activation_key as a_url %}
Thanks! ....
{% autoescape off %}
<a href="http://{{ site.domain }}{{ a_url }}?next='http://somepage_or_url'">
http://{{ site.domain }}{{ url_registration_activate }}/
</a>
{% endautoescape %}
Thanks!
EDIT
Хорошо, вышеизложенное относится к жестко закодированным перенаправлениям. Я предполагаю, что это поток, который вы хотите:
- Пользователь пытается перейти на страницу
- Пользователь перенаправляется на страницу входа / регистрации
- Пользователь регистрируется на этой странице и получает электронное письмо
- Пользователь активирует электронную почту и перенаправляется на исходную страницу, которую он пытался просмотреть
Это сложнее, поскольку страницу, которую они пытались просмотреть на первом шаге, нужно пройти до четвертого шага, и, как мы знаем, HTTP не имеет состояния.
Первое, что приходит на ум, - сохранить перенаправление в переменной сеанса при регистрации, а затем извлечь его при активации. Для этого мы можем перезаписать django-registrations бэкэнд по умолчанию (это просто класс с методами, которые описывают функциональность процесса регистрации и вызываются из представлений), в частности методы register и post_activation_redirect:
custom_backend.py
from registration.backends.default import DefaultBackend
class RedirectBackend(DefaultBackend):
def register(self, request, **kwargs):
request.session['redirect'] = request.GET.get("next",None)
super(RedirectBackend, self).register(request, **kwargs)
def post_activation_redirect(self, request, user):
return(request.session['redirect'], (), {})
и чтобы django-registration действительно использовал этот бэкэнд, мы предоставляем его представлениям через наш urls.py:
url(r'^activate/(?P<activation_key>\w+)/$',
activate,
{'backend': 'custombackend.RedirectBackend'},
name='registration_activate'),
url(r'^register/$',
register,
{'backend': 'custombackend.RedirectBackend'},
name='registration_register'),