Как я могу отключить перенаправление URL, когда у меня есть «следующий» URL? - Django - PullRequest
0 голосов
/ 26 марта 2020

Я создал блог с Django и всякий раз, когда пользователь входит в систему, URL перенаправляется на домашнюю страницу и отображает сообщение об успешном завершении. Это нормально, однако, всякий раз, когда требуется логин для просмотра определенной страницы, Django перенаправляет на страницу входа и присоединяет «? Next =» к концу URL, чтобы перенаправить обратно на предыдущую страницу. Проблема в том, что после входа пользователя «следующий» 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'})

1 Ответ

1 голос
/ 26 марта 2020

Вы можете получить этот next URL-адрес из request.GET и использовать его по умолчанию на своей домашней странице, если его там нет

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

Таким образом, если ?next=... в параметрах запроса, он будет использоваться как путь перенаправления, если это не так, вы будете перенаправлять на 'home'

...