简体   繁体   中英

Django-registration activate account but template shows error in activation

I am new to Django and I included django-registration to my project.

It works great except that when a user click on the activation link, his accounts is activated but the user is redirected to a template that says otherwise.

Here is the urls.py part :

urlpatterns = patterns('',
    url(r'^activate/complete/$',
        direct_to_template,
        {'template': 'registration/activation_complete.html'},
        name='registration_activation_complete'),
    url(r'^activate/(?P<activation_key>\w+)/$',
        activate,
        {'backend': 'registration.backends.default.DefaultBackend'},
        name='registration_activate'),

Here is the view part :

def activate(request, backend,
         template_name='registration/activate.html',
         success_url=None, extra_context=None, **kwargs):

    backend = get_backend(backend)
    account = backend.activate(request, **kwargs)

    if account:
        if success_url is None:
            to, args, kwargs = backend.post_activation_redirect(request, account)
            return redirect(to, *args, **kwargs)
        else:
            return redirect(success_url)

    if extra_context is None:
        extra_context = {}
    context = RequestContext(request)
    for key, value in extra_context.items():
        context[key] = callable(value) and value() or value

    return render_to_response(template_name,
                              kwargs,
                              context_instance=context)

The line :

backend.post_activation_redirect 

returns registration_activation_complete

And here is the template :

{% extends "base.html" %}
{% load i18n %}

{% block content %}

{% if account %}

<p>{% trans "Account successfully activated" %}</p>

<p><a href="{% url auth_login %}">{% trans "Log in" %}</a></p>

{% else %}

<p>{% trans "Account activation failed" %}</p>

{% endif %}

{% endblock %}

What I suspect is that it creates the account then gets redirected to another url thanks to the line :

return redirect(to, *args, **kwargs)

Then it calls the generic views direct_to_template but at this moment the variable account does not exist anymore since it was destroyed after the redirection (that's my guess).

I would like to send the account variable to the second view but did not manage to do it.

Thank you for your help with this problem.

The template has a conditional, it checks for the account variable, which is not set. Just remove the conditional and error message and you should be good to go. In django-registration 0.8, that variable is never set for the templates.

Here is a sample Activation Complete Template .

Hope this helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM