電子メール ( registration.views.activate ) によるアカウントのアクティブ化を担当するビューを見ると、 「成功したアクティブ化でリダイレクトする URL パターンの名前」であるsuccess_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-registrations activate ビューをラップし、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/activation_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!
編集
わかりましたので、上記はハードコーディングされたリダイレクトを扱っています。これがあなたが望むフローだと思います:
- ユーザーがページに移動しようとしています
- ユーザーがログイン/登録ページにリダイレクトされる
- ユーザーがそのページでサインアップすると、メールが送信されます
- ユーザーが電子メールを有効にすると、表示しようとした元のページにリダイレクトされます
これは、ステップ 1 で表示しようとしていたページをステップ 4 までずっと渡す必要があるため、より困難です。ご存知のように、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'),