kopia lustrzana https://github.com/wagtail/wagtail
Extend generic DeleteView for image DeleteView
rodzic
9a0aebba9c
commit
e3d2e93fb2
wagtail/images
templates/wagtailimages/images
tests
views
|
@ -7,7 +7,7 @@ urlpatterns = [
|
|||
path("", images.IndexView.as_view(), name="index"),
|
||||
path("results/", images.ListingResultsView.as_view(), name="listing_results"),
|
||||
path("<int:image_id>/", images.edit, name="edit"),
|
||||
path("<int:image_id>/delete/", images.delete, name="delete"),
|
||||
path("<int:image_id>/delete/", images.DeleteView.as_view(), name="delete"),
|
||||
path("<int:image_id>/generate_url/", images.url_generator, name="url_generator"),
|
||||
path(
|
||||
"<int:image_id>/generate_url/<str:filter_spec>/",
|
||||
|
|
|
@ -1,33 +1,22 @@
|
|||
{% extends "wagtailadmin/base.html" %}
|
||||
{% extends "wagtailadmin/generic/base.html" %}
|
||||
{% load wagtailimages_tags i18n wagtailadmin_tags %}
|
||||
{% block titletag %}{% trans "Delete image" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% trans "Delete image" as del_str %}
|
||||
{% include "wagtailadmin/shared/header.html" with title=del_str icon="image" %}
|
||||
|
||||
<div class="row row-flush nice-padding">
|
||||
{% block main_content %}
|
||||
<div class="row row-flush">
|
||||
<div class="col6">
|
||||
{% image image max-800x600 %}
|
||||
</div>
|
||||
<div class="col6">
|
||||
<div class="usagecount">
|
||||
<a href="{{ image.usage_url }}">{% blocktrans trimmed count usage_count=image.get_usage.count %}Used {{ usage_count }} time{% plural %}Used {{ usage_count }} times{% endblocktrans %}</a>
|
||||
</div>
|
||||
<p>
|
||||
{# This message will only appear in the singular, but we specify a plural so it can share the translation string with confirm_bulk_delete.html #}
|
||||
{% blocktrans trimmed count counter=1 %}
|
||||
Are you sure you want to delete this image?
|
||||
{% plural %}
|
||||
Are you sure you want to delete these images?
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
<form action="{% url 'wagtailimages:delete' image.id %}" method="POST">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" value="{{ next }}" name="next">
|
||||
<input type="submit" value="{% trans 'Yes, delete' %}" class="button serious" />
|
||||
<a href="{% url 'wagtailimages:index' %}" class="button button-secondary">{% trans "No, don't delete" %}</a>
|
||||
</form>
|
||||
{% include "wagtailadmin/shared/usage_summary.html" %}
|
||||
{{ view.confirmation_message }}
|
||||
{% if not is_protected %}
|
||||
<form action="{{ view.get_delete_url }}" method="POST">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" value="{{ view.get_success_url }}" name="next">
|
||||
<input type="submit" value="{% trans 'Yes, delete' %}" class="button serious" />
|
||||
<a href="{{ view.get_success_url }}" class="button button-secondary">{% trans "No, don't delete" %}</a>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1166,7 +1166,7 @@ class TestImageDeleteView(WagtailTestUtils, TestCase):
|
|||
response = self.get()
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, "wagtailimages/images/confirm_delete.html")
|
||||
self.assertContains(response, "Used 0 times")
|
||||
self.assertContains(response, "This image is referenced 0 times")
|
||||
expected_url = "/admin/images/usage/%d/" % self.image.id
|
||||
self.assertContains(response, expected_url)
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ from django.urls.exceptions import NoReverseMatch
|
|||
from django.utils.decorators import method_decorator
|
||||
from django.utils.http import urlencode
|
||||
from django.utils.translation import gettext as _
|
||||
from django.utils.translation import gettext_lazy, ngettext
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from wagtail.admin import messages
|
||||
|
@ -349,33 +350,37 @@ def preview(request, image_id, filter_spec):
|
|||
)
|
||||
|
||||
|
||||
@permission_checker.require("delete")
|
||||
def delete(request, image_id):
|
||||
image = get_object_or_404(get_image_model(), id=image_id)
|
||||
class DeleteView(generic.DeleteView):
|
||||
model = get_image_model()
|
||||
pk_url_kwarg = "image_id"
|
||||
permission_policy = permission_policy
|
||||
permission_required = "delete"
|
||||
header_icon = "image"
|
||||
template_name = "wagtailimages/images/confirm_delete.html"
|
||||
usage_url_name = "wagtailimages:image_usage"
|
||||
delete_url_name = "wagtailimages:delete"
|
||||
index_url_name = "wagtailimages:index"
|
||||
page_title = gettext_lazy("Delete image")
|
||||
|
||||
if not permission_policy.user_has_permission_for_instance(
|
||||
request.user, "delete", image
|
||||
):
|
||||
raise PermissionDenied
|
||||
|
||||
next_url = get_valid_next_url_from_request(request)
|
||||
|
||||
if request.method == "POST":
|
||||
image.delete()
|
||||
messages.success(
|
||||
request,
|
||||
_("Image '%(image_title)s' deleted.") % {"image_title": image.title},
|
||||
def user_has_permission(self, permission):
|
||||
return self.permission_policy.user_has_permission_for_instance(
|
||||
self.request.user, permission, self.object
|
||||
)
|
||||
return redirect(next_url) if next_url else redirect("wagtailimages:index")
|
||||
|
||||
return TemplateResponse(
|
||||
request,
|
||||
"wagtailimages/images/confirm_delete.html",
|
||||
{
|
||||
"image": image,
|
||||
"next": next_url,
|
||||
},
|
||||
)
|
||||
@property
|
||||
def confirmation_message(self):
|
||||
# This message will only appear in the singular, but we specify a plural
|
||||
# so it can share the translation string with confirm_bulk_delete.html
|
||||
return ngettext(
|
||||
"Are you sure you want to delete this image?",
|
||||
"Are you sure you want to delete these images?",
|
||||
1,
|
||||
)
|
||||
|
||||
def get_success_message(self):
|
||||
return _("Image '%(image_title)s' deleted.") % {
|
||||
"image_title": self.object.title
|
||||
}
|
||||
|
||||
|
||||
@permission_checker.require("add")
|
||||
|
@ -419,6 +424,7 @@ class UsageView(generic.UsageView):
|
|||
pk_url_kwarg = "image_id"
|
||||
permission_policy = permission_policy
|
||||
permission_required = "change"
|
||||
header_icon = "image"
|
||||
|
||||
def user_has_permission(self, permission):
|
||||
return self.permission_policy.user_has_permission_for_instance(
|
||||
|
|
Ładowanie…
Reference in New Issue