0

如果他们已经登录并尝试直接转到“../login/”,我想将我的应用程序中的用户重定向到他们的用户页面。我找到了这个答案:

Django:从登录页面重定向登录用户

在我决定点击登录字段下方的“注册”链接之前,它的效果非常好。我不知道为什么,但是当我点击它时,我再次重定向到登录页面,但唯一改变的是 url,由于某种原因它变成“ http://localhost:8000/users/login/?next =/users/register/ ”,它不会带我到我的注册页面。

如果我在登录模板中使用另一个 url 设置它,为什么“下一个”变量会发生变化,如下所示:

{% extends "base.html" %}
    {% block title %}User Login{% endblock %}
    {% block head %}User Login{% endblock %}
    {% block content %}
        {% if form.errors %}
            <p>User name or password is incorrect.</p>
        {% endif %}
        <form method="post" action="{% url login %}">
            {% csrf_token %}
            <p><label for="id_username">Username:</label>
                {{ form.username }}</p>
            <p><label for="id_password">Password:</label>
                {{ form.password }}</p>
            <input type="submit" value="Login" />
            <input type="hidden" name="next" value="users/"/>
        </form>
            <li><a href="/users/register/">Register</a></li>
    {% endblock %}

我正在使用 django1.4 和 python 2.7。我的 urls.py 是:

对于整个应用程序:

urlpatterns = patterns('',
    url(r'^$', main_page, name="main_page"),
    url(r'^users/',include('user_manager.urls')),
)

对于 user_manager 模块:

urlpatterns = patterns('user_manager.views',
    url(r'^$', users, name="user_page"),
    url(r'^logout/$', user_logout, name="logout"),
    url(r'^login/$', user_login, name="login"),
    url(r'^(\w+)/$', user_page),
    url(r'^register/$', register_page),
)
4

2 回答 2

0

你有那个视图的@login_required装饰器吗?register_page如果是这样,请将其删除

于 2012-05-24T22:59:02.950 回答
0

好的,我发现了问题。Django 按顺序检查 urls 正则表达式,因此“注册”url 匹配用于用户页面的“(\w+)/”。所以我所要做的就是把那个 url 放在最后,urls.py 现在看起来像这样:

urlpatterns = patterns('user_manager.views',
    url(r'^$', users, name="user_page"),
    url(r'^logout/$', user_logout, name="logout"),
    url(r'^login/$', user_login, name="login"),
    url(r'^register/$', register_page),
    url(r'^(\w+)/$', user_page),
)

尽管如此,我仍然不太明白为什么那个错误的匹配会改变下一个值。我知道这是导致它,但我不知道为什么...

非常感谢您的宝贵时间!

于 2012-05-27T14:56:37.787 回答