Django-registration激活账户但模板显示激活错误

1 投票
1 回答
2173 浏览
提问于 2025-04-17 14:01

我刚开始学习Django,并在我的项目中加入了django-registration。

这个功能运行得很好,但有一个问题:当用户点击激活链接时,虽然他的账户被激活了,但他却被重定向到了一个显示相反信息的页面。

这是urls.py的部分:

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'),

这是视图部分:

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)

这一行:

backend.post_activation_redirect 

返回了registration_activation_complete

这是模板:

{% 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 %}

我猜测是这样的:它创建了账户,然后通过这一行重定向到另一个网址:

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

然后它调用了通用视图direct_to_template,但在这个时候,账户变量已经不存在了,因为在重定向后它被销毁了(这是我的猜测)。

我想把账户变量传递到第二个视图,但没有成功。

谢谢你们帮我解决这个问题。

1 个回答

2

这个模板里有一个条件判断,它在检查一个叫做 account 的变量,但这个变量并没有被设置。你只需要把这个条件判断和错误信息删掉就可以了。在django-registration 0.8版本中,这个变量在模板里是不会被设置的。

这里有一个示例的 激活完成模板

希望这对你有帮助!

撰写回答