diff --git a/wagtail/contrib/redirects/templates/wagtailredirects/add.html b/wagtail/contrib/redirects/templates/wagtailredirects/add.html
index 0cecf1331a..65ff87b170 100644
--- a/wagtail/contrib/redirects/templates/wagtailredirects/add.html
+++ b/wagtail/contrib/redirects/templates/wagtailredirects/add.html
@@ -1,24 +1 @@
-{% extends "wagtailadmin/generic/form.html" %}
-{% load i18n wagtailadmin_tags %}
-{% block titletag %}{% trans "Add redirect" %}{% endblock %}
-{% block content %}
- {% trans "Add redirect" as add_red_str %}
- {% include "wagtailadmin/shared/header.html" with title=add_red_str icon="redirect" %}
-
- {% include "wagtailadmin/shared/non_field_errors.html" %}
-
-
-
-{% endblock %}
+{% extends "wagtailadmin/generic/create.html" %}
diff --git a/wagtail/contrib/redirects/urls.py b/wagtail/contrib/redirects/urls.py
index a3432cfa2e..54ef8cb5d3 100644
--- a/wagtail/contrib/redirects/urls.py
+++ b/wagtail/contrib/redirects/urls.py
@@ -6,7 +6,7 @@ app_name = "wagtailredirects"
urlpatterns = [
path("", views.IndexView.as_view(), name="index"),
path("results/", views.IndexView.as_view(results_only=True), name="index_results"),
- path("add/", views.add, name="add"),
+ path("add/", views.CreateView.as_view(), name="add"),
path("/", views.EditView.as_view(), name="edit"),
path("/delete/", views.delete, name="delete"),
path("import/", views.start_import, name="start_import"),
diff --git a/wagtail/contrib/redirects/views.py b/wagtail/contrib/redirects/views.py
index bd9990bed8..50c1788992 100644
--- a/wagtail/contrib/redirects/views.py
+++ b/wagtail/contrib/redirects/views.py
@@ -201,48 +201,27 @@ def delete(request, redirect_id):
)
-@permission_checker.require("add")
-def add(request):
- if request.method == "POST":
- form = RedirectForm(request.POST, request.FILES)
- if form.is_valid():
- with transaction.atomic():
- theredirect = form.save()
- log(instance=theredirect, action="wagtail.create")
+class CreateView(generic.CreateView):
+ model = Redirect
+ form_class = RedirectForm
+ permission_policy = permission_policy
+ template_name = "wagtailredirects/add.html"
+ add_url_name = "wagtailredirects:add"
+ index_url_name = "wagtailredirects:index"
+ edit_url_name = "wagtailredirects:edit"
+ error_message = gettext_lazy("The redirect could not be created due to errors.")
+ header_icon = "redirect"
+ _show_breadcrumbs = True
- purge_urls_from_cache(theredirect.old_links())
+ def get_success_message(self, instance):
+ return _("Redirect '%(redirect_title)s' added.") % {
+ "redirect_title": instance.title
+ }
- messages.success(
- request,
- _("Redirect '%(redirect_title)s' added.")
- % {"redirect_title": theredirect.title},
- buttons=[
- messages.button(
- reverse("wagtailredirects:edit", args=(theredirect.id,)),
- _("Edit"),
- )
- ],
- )
- return redirect("wagtailredirects:index")
- else:
- messages.error(
- request, _("The redirect could not be created due to errors.")
- )
- else:
- form = RedirectForm()
-
- return TemplateResponse(
- request,
- "wagtailredirects/add.html",
- {
- "form": form,
- # Remove these when this view is refactored to a generic.CreateView subclass.
- # Avoid defining new translatable strings.
- "submit_button_label": generic.CreateView.submit_button_label,
- "submit_button_active_label": generic.CreateView.submit_button_active_label,
- "media": form.media,
- },
- )
+ def save_instance(self):
+ instance = super().save_instance()
+ purge_urls_from_cache(instance.old_links())
+ return instance
@permission_checker.require_any("add")