如何在Django中带请求上下文重定向到另一个URL

1 投票
1 回答
2311 浏览
提问于 2025-04-18 05:46

我刚接触 Django,现在有一个简单的用户登录场景。我有两个模板:index.htmlregister.html

register.html 中,这只是一个简单的用户注册网页,用户填写信息后会把数据发送到一个网址:

<form class="form-horizontal" action="/register/" method="post">
    ......
</form>

而在 index.html 中,它会显示用户的信息:

    {% if user.is_authenticated %}
        <p>Welcome, {{ user.username }}. Thanks for logging in.</p>
    {% else %}
        <p>Welcome, new user. Please log in.</p>
    {% endif %}

这是 urls.py 的内容:

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'register/form/', views.register_form,name='register_form'),
    url(r'register/', views.register, name='register'),
)+static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

这是 views.py 的内容:

def index(request):
    return render(request, 'index.html')


def register_form(request):
    return render(request, 'register.html')


def register(request):
    if request.method == 'POST':

        user = User.objects.create_user(username=request.POST['username'], password=request.POST['password'])
        user.save()

        user = authenticate(username=request.POST['username'], password=request.POST['password'])
        auth.login(request, user)

        return render_to_response('index.html', context_instance=RequestContext(request))

我有一个问题:

首先,访问这个网址 register/form/ 填写表单并提交数据,然后它会转到网址 register/ 来处理数据,最后再跳转到 index.html。但是浏览器中的网址仍然是 register/

在注册后,我希望网址变成 my_domain_name/,而不是 my_domain_name/register/,因为如果网址还是 my_domain_name/register/,刷新页面时会提示是否再次提交数据。

请帮帮我。

1 个回答

1

你可以试试这个链接:https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirect。然后把你的 view.py 文件修改成下面这样:

from django.shortcuts import redirect

def register(request):
    ...
    return redirect('/')

撰写回答