当我有“下一个”网址时,如何禁用网址重定向? - 姜戈

Posted

技术标签:

【中文标题】当我有“下一个”网址时,如何禁用网址重定向? - 姜戈【英文标题】:How can I disable URL redirect when I have a "next" url? - Django 【发布时间】:2020-07-07 03:46:35 【问题描述】:

我用 Django 创建了一个博客,每当用户登录时,URL 都会重定向到主页并显示成功消息。这很好,但是,每当需要登录才能查看某个页面时,Django 都会重定向到登录页面并将“?next =”附加到 URL 的末尾以重定向回上一页。问题是用户登录后,“next” URL 没有执行,Django 重定向到主页并显示成功消息?有没有办法在有“下一个”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.POST.get('next') 吗? 【参考方案1】:

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

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

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

【讨论】:

以上是关于当我有“下一个”网址时,如何禁用网址重定向? - 姜戈的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular js 中禁用哈希重定向

在Chrome中,最终使用带有正则表达式的重定向扩展程序,如何将所有facebook.com网址重定向到mbasic.facebook.com URLS

如何重定向以“.jsp”结尾的网址

如何在NGINX中重定向一个网址

如何在django oscar中设置Paypal重定向网址?

如何在 .htaccess 503 重定向中保持网站网址相同