当我有 "next" url 时,如何禁用 URL 重定向? - 姜戈

How can I disable URL redirect when I have a "next" url? - Django

我用 Django 创建了一个博客,每当用户登录时,URL 都会重定向到主页并显示一条成功消息。这很好,但是,无论何时需要登录才能查看某个页面,Django 都会重定向到登录页面并将“?next=”附加到 URL 的末尾以重定向回上一页。问题是用户登录后,"next" URL 没有执行,Django 重定向到首页并显示成功消息?有没有办法在 "next" URL?

时禁用此重定向

views.py

from django.urls import reverse
from django.contrib import messages
from django.shortcuts import render, redirect
from django.contrib.auth import login
from django.utils.safestring import mark_safe
from .forms import UserLoginForm

def login_view(request):
    if request.method == 'POST':
        form = UserLoginForm(data=request.POST)
        if form.is_valid():
            student = form.get_user()
            login(request, user)
            create_url = reverse('post-create')
            messages.success(request, mark_safe(f'You are now logged in. Do you want to <a href="{ create_url }" class="link" title="Create a post">create a post</a>?'))
            return redirect('home')
    else:
        form = UserLoginForm()
    return render(request, 'users/login.html', {'form': form, 'title': 'Log in'})

您可以从 request.GET 获取此 next url,如果不存在则默认为您的主页

return redirect(request.GET.get('next', 'home'))

这样,如果 ?next=... 在查询参数中,它将被用作重定向路径,如果不是,那么您将重定向到 'home'