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" %} - -
- {% csrf_token %} - - - - {% block footer %} - {{ block.super }} - {% endblock %} -
- -{% 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")