Redirect некорректно преобразует специальные символы при перенаправлении в django

У меня есть страница в моем приложении django, которая требует аутентификации. Если пользователь нажимает mydomian/my_page, представление оценивает, аутентифицирован ли запрос. Если запрос аутентифицирован, то он будет перенаправлен на нужную html-страницу (my_page.html). Если запрос не аутентифицирован, запрос будет перенаправлен на страницу входа в систему с редиректом:

class MyView(View):
    def get(self, request):
        user = request.user
        context = {
            'username': user.username
        }

        if user.is_authenticated and user.is_staff:
            return render(request,
                          'path/to/my_page.html',
                          context)
        logout(request)

        return redirect('/admin/login?next=/my_page') 

Это работало довольно хорошо, когда неаутентифицированный пользователь нажимал mydomain/my_page, он направлялся на mydomain/admin/login/?next=/my_page, а после аутентификации он направлялся на mydomain/my_page, который обслуживал path/to/my_page.html.

Теперь я обновился до последней версии django, и перенаправление изменилось: когда неаутентифицированный запрос попадает на мою страницу, он перенаправляется на этот url mydomain/admin/login/?next=/admin/login%3Fnext%3D/my_path. Когда на этой странице происходит логин, страница перенаправляется на mydomain/admin вместо mydomain/my_page. Затем, когда я вызываю mydomain/my_page, она перенаправляется на нужную страницу (поскольку запрос аутентифицирован).

Я попробовал заменить перенаправление на

return HttpResponseRedirect((('/admin/login?next=/my_page').encode('utf-8')))

но не сработало. Я также не смог найти ничего в документации django о том, можно ли и как изменить метод перенаправления.

Есть идеи?

После просмотра документации здесь и здесь я понял, что редирект теперь хочет слеш после admin.

так что это return redirect('/admin/login/?next=/my_page') решило мою проблему. В противном случае он добавляет предоставленную ссылку к моему url.

Вернуться на верх