редирект на предыдущую страницу django
Django: перенаправление на предыдущую страницу после входа в систему
Я пытаюсь создать простой веб-сайт с функциональностью входа, очень похожей на ту, что здесь на SO. Пользователь должен иметь возможность просматривать сайт как анонимный пользователь, и на каждой странице будет ссылка для входа. При нажатии на ссылку для входа в систему пользователь будет переведен в форму для входа. После успешного входа в систему пользователь должен вернуться на страницу, с которой он сначала щелкнул ссылку для входа. Я предполагаю, что мне нужно каким-то образом передать URL текущей страницы представлению, которое обрабатывает форму входа, но я не могу заставить ее работать.
РЕДАКТИРОВАТЬ: Я понял это. Я связался с формой входа, передав текущую страницу в качестве параметра GET, а затем использовал «следующий» для перенаправления на эту страницу. Благодарность!
РЕДАКТИРОВАТЬ 2: Мое объяснение, казалось, не было ясным, так как запрошенный здесь мой код: допустим, мы находимся на странице foo.html и мы не вошли в систему. Теперь мы хотели бы иметь ссылку на foo.html, которая ссылается в login.html. Там мы можем войти и затем перенаправлены обратно в foo.html. Ссылка на foo.html выглядит так:
Теперь я написал собственный вид входа в систему, который выглядит примерно так:
И важная строка в login.html:
Встроенная аутентификация Django работает так, как вы хотите.
Я связался с формой входа, передав текущую страницу в качестве параметра GET, а затем использовал «следующий» для перенаправления на эту страницу. Благодарность!
Вы также можете сделать это
Я столкнулся с той же проблемой. Это решение позволяет мне продолжать использовать общий вид входа в систему:
См. Документы django для views.login (), вы вводите «следующее» значение (как скрытое поле) в форму ввода для перенаправления после успешного входа в систему.
Это не может быть «лучшей практикой», но я успешно использовал это раньше:
Для поддержки полных URL с параметрами / значениями вам понадобится:
Django: перенаправление на предыдущую страницу после входа в систему
Я пытаюсь создать простой веб-сайт с функциями входа в систему, очень похожим на тот, который находится здесь, на SO.
Пользователь должен иметь возможность просматривать сайт как анонимный пользователь, и на каждой странице будет ссылка для входа. При нажатии на ссылку входа пользователь будет отправлен в форму для входа. После успешного входа в систему пользователь должен быть возвращен на страницу, откуда он первым нажал ссылку на вход.
Я предполагаю, что мне нужно каким-то образом передать url текущей страницы в представление, которое обрабатывает форму входа, но я не могу заставить ее работать.
EDIT:
Я понял. Я связался с формой входа, передав текущую страницу как параметр GET, а затем использовал “next” для перенаправления на эту страницу. Спасибо!
ИЗМЕНИТЬ 2:
Мои объяснения, похоже, не были ясными, так как здесь был запрошен мой код:
Допустим, мы находимся на странице foo.html, и мы не вошли в систему. Теперь мы хотели бы иметь ссылку на foo.html, которая ссылается на login.html. Там мы можем войти и затем перенаправлены обратно в foo.html.
Ссылка на foo.html выглядит так:
Теперь я написал пользовательское окно входа в систему, которое выглядит примерно так:
И важная строка в login.html:
Это не может быть “лучшей практикой”, но я успешно использовал это раньше:
Чтобы поддерживать полные URL-адреса с параметрами/значениями, которые вам нужны:
Встроенная аутентификация Django работает так, как вы хотите.
Я связался с формой входа, передав текущую страницу как параметр GET, а затем использовал “next” для перенаправления на эту страницу. Спасибо!
Я столкнулся с той же проблемой. Это решение позволяет мне использовать общий вид входа в систему:
В registration/login.html (вложенном в папку templates ), если вы вставляете следующую строку, страница будет отображаться как оригинальная страница входа администратора Django:
Примечание. Файл должен содержать только указанные выше строки.
Редирект на предыдущую страницу django
Здравствуйте уважаемые посетители форума. Сейчас постараюсь объяснить суть проблемы подробней, но если вам интересует конкретно сам вопрос,то читайте,что выделено курсивом. Есть страница, на которой отображен список заданий. На конкретное задание генерируется url «/task/comment/15». При переходе на конкретное задание отображается список комментариев с определенными url для удаления,например «/comment/2/delete/». Представлению-классу DeleteView необходимо указать succes_url,по идее мы должны вернуться на страницу с конкретным заданием «/task/comment/15». Как сделать redirect на предыдущую страницу, которой является страницей сгенерированная django’й с url’ом, например, /task/comment/15, то есть сгенерированной по модели.
Удаляемый комментарий привязан к заданию. Достаточно перед удалением комментария получить PK задания и затем использовать его при указании перенаправления, например так:
Удаляемый комментарий привязан к заданию. Достаточно перед удалением комментария получить PK задания и затем использовать его при указании перенаправления, например так:
def delete_comment(request, comment_pk):
obj = get_object_or_404(Comment, pk=comment_pk)
success_url = redirect(‘appname:task_list’, pk=obj.task.pk)
Да все верно, как то я сразу до этого не догадался, видимо опыта мало. Спасибо большое за исчерпывающий ответ!
Перенаправление на предыдущую страницу после регистрации в Django
Для входа и выхода из системы я использую встроенное представление Django в django.contrib.auth.views. Очень легко перенаправить пользователя на предыдущую страницу, потому что вы можете передать «следующий» параметр в окно входа/выхода из системы. Они работают отлично.
Когда я хочу выполнить аналогичную функциональность для регистрации, есть некоторые проблемы. Похоже, что Django не имеет встроенного регистрационного представления. Поэтому я использую CreateView с ‘model = User’. Коды следующие:
Теперь у меня нет аналогичного параметра «next», как во встроенном представлении входа/выхода. Затем, как я могу перенаправить нового пользователя на предыдущую страницу после регистрации?
Я попробовал следующий метод:
Шаг 1. Из шаблона, который будет запускать мое представление регистрации, передайте «следующий» параметр с помощью метода GET.
Кстати, URL-адрес, связанный с регистрацией:
Шаг 2: Перезапишите методы get_context_data() и get_success_url(), пытаясь создать собственный параметр «next»:
Шаг 3. В моем шаблоне добавьте «скрытое» поле ввода, чтобы сохранить следующее значение:
Этот метод работает только в том случае, если пользователь не ошибается во время процедуры регистрации. Если, например, пользовательские POST файлы с именем пользователя, которое существует, или формат адреса электронной почты является недопустимым, этот метод сообщит об ошибке «следующий» параметр.
Может ли кто-нибудь дать метод для перенаправления пользователя после регистрации? Или Можете ли вы изменить мои коды для выполнения этой функции? Я бы хотел использовать Django Built-in Class Generated Views вместо того, чтобы писать новый вид с нуля.
Перенаправление страниц Django
Перенаправление страниц необходимо по многим причинам в веб-приложениях. Возможно, вы захотите перенаправить пользователя на другую страницу, когда происходит определенное действие, или в основном в случае ошибки. Например, когда пользователь входит на ваш сайт, его часто перенаправляют либо на главную домашнюю страницу, либо на его личную панель инструментов. В Django перенаправление выполняется методом redirect.
Метод redirect принимает в качестве аргумента URL-адрес, на который вы хотите быть перенаправлены, представляющий собой строку.
Файл myapp/views.py пока выглядит следующим образом:
Давайте изменим представление hello для перенаправления на djangoproject.com, а viewArticle для перенаправления на наш внутренний адрес /myapp/article. Файл myapp/view.py изменится и станет выглядеть следующим образом:
В приведенном выше примере сначала мы импортировали функцию для перенаправления из django.shortcuts. Для перенаправления на официальный сайт Django мы просто передали полный URL-адрес методу redirect в виде строки, а для второго примера (представление viewArticle) метод перенаправления принимает имя представления и его параметры в качестве аргументов.
Получив доступ к /myapp/hello, вы увидите следующее:
А доступ к /myapp/article/42, даст вам следующий результат:
Также можно указать, является ли перенаправление временным или постоянным, добавив параметр constant = True. Пользователь не увидит никакой разницы, но это детали, которые поисковые системы учитывают при ранжировании вашего сайта.
Также помните, что мы определили параметр name в нашем urls.py при сопоставлении URL-адреса:
Это имя (в данном случае articles) может использоваться в качестве аргумента для метода redirect, тогда наше перенаправление viewArticle может быть изменено с: