如何重定向到'http://127.0.0.1:8000/profile/'而不是'http://127.0.0.1:8000/accounts/login/?next=/profile/'



我正在尝试编辑用户配置文件。用户在个人资料上编辑表单.html当他们提交表单时,他们应该被重定向回个人资料.html(同一页面)。即使我更改了LOGIN_REDIRECT_URL,我仍然重定向到帐户/登录(默认值)。

views.py

@login_required
def profile(request):
    user = request.user
    if request.method == "POST":
        signupform = SignUpForm(data=request.POST, instance=request.user)
        if signupform.is_valid():
              signupform.save()
              return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
    return render(request, 'profile.html', "context stuff here")

settings.py

LOGIN_REDIRECT_URL = '/profile'

urls.py

url(r'^profile/$', views.profile, name='profile')

如何成功重定向到个人资料.html?

尝试将 APPNAME 替换为应用的名称(与你在 settings.py INSTALLED APPS部分中声明的应用名称相同)

return HttpResponseRedirect(reverse('APPNAME:profile'))

不要忘记在页面顶部导入

from django.urls import reverse

您使用

@login_required装饰器,但未登录。以便它将您重定向到登录页面。如果您登录,则重定向至/profile

你可以

这样做,

@login_required
#...
   if signupform.is_valid():
          signupform.save()
          return redirect('profile') # or 'app_name:profile' if you have app_name before your urlpatterns.

您的login_required会将您重定向到设置。LOGIN_URL

因此,在您的设置中添加LOGIN_URL = '/login/'

如果用户登录,视图将完美运行。

除此之外,(模板级别)您还可以在 html 中检查身份验证,

{% if user.is_authenticated %}
#html
{% else %}
show something
{% endif %}

最新更新