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

Атрибут success_url

Атрибут success_url используется в классе FormView для указания URL-адреса, на который будет перенаправлен пользователь после успешной обработки данных формы. Этот атрибут обязателен для классов, наследующих от FormView, если метод FormView/method/get_success_url/">get_success_url не переопределен. Значение атрибута может быть задано как строка с относительным или абсолютным путем, либо как имя URL-шаблона для использования с reverse_lazy.

Синтаксис

class MyFormView(FormView): form_class = MyForm template_name = 'my_template.html' success_url = '/success-url/'

Пример . Использование строки URL

Давайте создадим представление, которое после успешной отправки формы перенаправляет пользователя на страницу с благодарностью:

from django.views.generic.edit import FormView from django import forms class ContactForm(forms.Form): name = forms.CharField(max_length=100) email = forms.EmailField() message = forms.CharField(widget=forms.Textarea) class ContactFormView(FormView): form_class = ContactForm template_name = 'contact.html' success_url = '/thank-you/' def form_valid(self, form): # Обработка данных формы return super().form_valid(form)

Результат выполнения кода:

"Redirects to: /thank-you/"

Пример . Использование reverse_lazy

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

from django.views.generic.edit import FormView from django.urls import reverse_lazy from django import forms class SubscribeForm(forms.Form): email = forms.EmailField() class SubscribeFormView(FormView): form_class = SubscribeForm template_name = 'subscribe.html' success_url = reverse_lazy('thanks') def form_valid(self, form): # Сохранение подписчика return super().form_valid(form)

Результат выполнения кода:

"Redirects to: /thanks/"

Динамическое определение success_url

Для более гибкой логики можно переопределить метод get_success_url, который возвращает URL для перенаправления:

from django.views.generic.edit import FormView from django.urls import reverse_lazy from django import forms class FeedbackForm(forms.Form): rating = forms.IntegerField(min_value=1, max_value=5) comment = forms.CharField(widget=forms.Textarea) class FeedbackFormView(FormView): form_class = FeedbackForm template_name = 'feedback.html' success_url = reverse_lazy('feedback-success') def get_success_url(self): # Динамическое определение URL if self.request.user.is_authenticated: return reverse_lazy('user-dashboard') return super().get_success_url() def form_valid(self, form): # Обработка отзыва return super().form_valid(form)

Результат выполнения кода:

"Redirects to: /dashboard/ (для авторизованных) или /feedback-success/ (для анонимов)"

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

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