РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
316 of 818 menu

Метод get_success_url

Метод get_success_url применяется к классу FormView и его наследникам. Он определяет, на какой URL будет перенаправлен пользователь после успешной отправки и валидации формы. Метод может возвращать строку с относительным или абсолютным адресом, либо результат вызова функции reverse или reverse_lazy. По умолчанию он возвращает значение атрибута FormView/attribute/success_url/">success_url, если он задан.

Синтаксис

class MyFormView(FormView): success_url = '/success/' def get_success_url(self): return super().get_success_url() # Или кастомная логика

Пример

Простой пример использования метода get_success_url с явным указанием URL:

from django.views.generic.edit import FormView from myapp.forms import ContactForm class ContactFormView(FormView): template_name = 'contact.html' form_class = ContactForm success_url = '/thanks/' def get_success_url(self): # Можно вернуть строку напрямую return '/thanks/'

Пример

Использование функции reverse_lazy для динамического построения URL по имени маршрута:

from django.views.generic.edit import FormView from django.urls import reverse_lazy from myapp.forms import ContactForm class ContactFormView(FormView): template_name = 'contact.html' form_class = ContactForm def get_success_url(self): # reverse_lazy используется для отложенного построения URL return reverse_lazy('main:thanks')

Пример

Переопределение get_success_url с использованием данных из формы для создания персонализированного URL:

from django.views.generic.edit import FormView from django.urls import reverse_lazy from myapp.forms import UserProfileForm class UserProfileFormView(FormView): template_name = 'profile_form.html' form_class = UserProfileForm def get_success_url(self): # Получаем данные формы после валидации clean_data = self.request.POST username = clean_data.get('username') # Формируем URL с параметром return reverse_lazy('profile_detail', kwargs={'username': username})

Пример

Кастомный метод get_success_url с проверкой, сохраненной в сессии, для перенаправления на предыдущую страницу:

from django.views.generic.edit import FormView from django.shortcuts import redirect from django.urls import reverse from myapp.forms import CommentForm class CommentFormView(FormView): template_name = 'add_comment.html' form_class = CommentForm def get_success_url(self): # Получаем URL из сессии или HTTP_REFERER next_url = self.request.session.get('next_url') if next_url: # Удаляем после использования del self.request.session['next_url'] return next_url # Иначе стандартный URL return reverse('comment_list')

Смотрите также

  • атрибут success_url,
    который задает URL перенаправления по умолчанию
  • метод form_valid,
    который вызывается при успешной валидации формы
  • функция reverse_lazy,
    которая используется для отложенного разрешения URL
  • класс RedirectView,
    который используется для простых перенаправлений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить